home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 August: Tool Chest / Dev.CD Aug 94.toast / Tool Chest / Testing & Debugging / Virtual User tools / SPEC S&L v.1.0.1 / Docs / HitchHiker's Guide 1.0.1v3 / HitchHiker's Guide 1.0.1v3
Encoding:
Text File  |  1993-12-20  |  628.8 KB  |  1,067 lines  |  [ONLN/HLX2]

  1. The HitchHiker's Guide
  2. to SPEC S&L v.1.0.1
  3. Document Version 1.0.1v.3
  4.  
  5. Contents
  6. About This Document    6
  7. Introduction    7
  8. Automation Overview    7
  9. SPEC S&L  Overview    7
  10. Part I – Execution
  11. Setup & Execution    10
  12. Target Setup    10
  13. Host    11
  14. The Cloning Process    11
  15. Part II – Development
  16. Scripts Overview    14
  17. The Elements That Make Up A Quicklook    14
  18. Descriptive Header    15
  19. Library Declarations    16
  20. Application Specific Tasks    16
  21. Script Declaration    16
  22. Body Of A Script    16
  23. Scripts Included With This Package    18
  24. Libraries Overview    19
  25. How To Use The Libraries    19
  26. Library Task Benefits    19
  27. Adding To / Modifying The Libraries    20
  28. Fixing A Bug In The Libraries    20
  29. Conventions Used For Task Definitions    20
  30. SPEC S&L Layer Model    21
  31. Exercising Window Features    22
  32. Overview    22
  33. Calling The Window Tasks    22
  34. Performing Standard File Operations    27
  35. Overview    27
  36. Calling The Standard File Library    27
  37. Exercising Fonts    31
  38. Font Related Global Variables    31
  39. Test Methods    32
  40. Performing Draw Operations    33
  41. Using Palettes    33
  42. Using Tools    39
  43. Using Objects    43
  44. Using The Draw Libraries    47
  45. Test Case Tracking    51
  46. Overview    51
  47. How Test Case Tracking Works    51
  48. Calling The Test Case Tracking Tasks    53
  49. Appendix A - QuickLook Definition    56
  50. Appendix B - Sample QuickLook    57
  51. Contents (continued)
  52. Appendix C - Sample Scripts    62
  53. Appendix D - Library Dependencies    63
  54. Appendix E - Tasks within Libraries    65
  55. Custom.Lib    65
  56. DA.Lib    65
  57. DoTasks.Lib    65
  58. Draw.Lib    65
  59. FileTool.Lib    65
  60. Finder.Lib    65
  61. Font.Lib    66
  62. Geometry.Lib    66
  63. Gestalt.Lib    66
  64. Globals.Lib    66
  65. LaunchQuit.Lib    67
  66. MathTool.vulib    67
  67. Misc.Lib    67
  68. OnTarget.Lib    67
  69. OutPut.Lib    67
  70. Palette.Lib    67
  71. Print.Lib    67
  72. Select.Lib    68
  73. StandardFile.Lib    68
  74. String.Lib    68
  75. TargetCheck.Lib    68
  76. TCS.Lib    68
  77. Text.Lib    68
  78. UserInterface.Lib    69
  79. Utility.Lib    69
  80. WordProcessor.Lib    69
  81. Appendix F - Task Listing Sorted Alphabetically    70
  82. Appendix G - Global Variables & Constants    76
  83. Initialized In The Initglobals Task    76
  84. Controlling The Test Level    85
  85. Initialized In The Initdraw Task    87
  86. Initialized In The Initfonts Task    91
  87. Initialized In The Initrandomseed Task    94
  88. Undefined Task References - Hooks    95
  89. Appendix H - Test Cases in SPEC S&L    99
  90. Appendix I - Utility Tools    101
  91. MouseTrap    101
  92. vuCollect    101
  93. MiniLauncher    101
  94. OnTarget    101
  95. Acknowledgments
  96. This document is the result of fruitful work from several individuals that deserve to be mentioned, even though some of them have moved on to other challenges at Apple and are no longer working closely with us. We want to thank them for the excellent effort, support and cooperation:
  97. Key Contributor:
  98. Dave Matzner, Michael Leong, Gil Spencer, Ken Landreth, Jeff Mitchell, Nick Vaccaro, Eric Hewitt.
  99. Other Contributors:
  100. John Coelho, Mikel De Sanctis, Jay Jessen, John Harrison, Kristi Kokalis, Naga, Stuart Russell, Nancy Schorr, Carol Wilser and the entire Virtual User team. 
  101.  
  102.  
  103. About This Document
  104. SPEC S&L is a collection of Virtual User scripts and libraries developed to expedite the Macintosh application and system software compatibility test process. This document is a user's guide for people who intend to utilize SPEC S&L. The document is divided into two parts. Part I addresses the execution of scripts, intended for individuals running scripts within the SPEC S&L framework. We have attempted to include many of the issues that can arise when setting up and running an automated test lab. Part II describes the SPEC S&L libraries in specific detail,  intended primarily for individuals developing new scripts and libraries within the SPEC S&L framework. This document will evolve over time, to address most of the issues that arise as people begin using SPEC S&L. 
  105.  
  106. Introduction
  107. Automation Overview
  108. Virtual User is a user-level automation system designed for the purpose of testing the elements of the Macintosh human interface. If you are not familiar with Virtual User you may want to read Setting Up and Running Virtual User  and/or Virtual User Language Reference Guide. By utilizing Virtual User to automatically exercise features of the human interface, test suites can be developed that will verify various levels of functionality. Test suites once developed will provide numerous benefits. Below is a list of some of the benefits provided by the use of automation.
  109. Benefits:
  110. - Reusable test suites
  111. - Repeatable test execution
  112. - Multiple configurations tested concurrently
  113. - Automate tedious tasks 
  114. - Benchmark performance 
  115. - Integration with environmental variables
  116.  S&L  Overview
  117. SPEC S&L is a collection of Virtual User (VU) libraries and scripts that will help quality engineers verify compatibility with third party products. Automated testing utilizing Virtual User has provided a means for limiting the amount of resources required to verify software compatibility with third party products. SPEC S&L  addresses the need to have a single framework for developing Virtual User automated test scripts. SPEC S&L will help software engineers by performing the repetitive tasks involved in verifying compatibility in two ways: 
  118. 1) Providing a collection of  compatibility tests for many of the major third party applications existing for the Macintosh.
  119. 2)  Providing an extendible script development framework for groups that are interested in automating additional compatibility testing. 
  120. SPEC S&L contains two distinct elements: Scripts and Libraries. Libraries are a collection of commonly used tasks. By placing commonly used tasks  into libraries we gain several advantages:
  121. 1) Reusable VU code base.
  122. 2) Smaller more efficient scripts.
  123. 3) Consistency - Testing common features between applications in similar manner.
  124. 4) Maintainability - Handle changes in central location instead of updating numerous files.
  125. 5) Flexibility -  Ability to override default routines, if application features require it.
  126. 6) Extendibility - It is easy to extend any of the data structures in the libraries to handle additional features, and since everything that is specific to an application is contained within one script file it is easy to add additional features to the test suite without affecting other suites.
  127. SPEC S&L scripts are made up of several elements including: calls to library tasks, application specific data structures, application specific tasks. By limiting what the scripts contain, we have set a standard for limiting code redundancy. Since the majority of the testing is controlled from the same set of libraries, testing between applications is very consistent. The application data structures mentioned above are discussed in Part II of this document. For more information on Scripts refer to the section titled QuickLook Scripting.
  128. Important Notes
  129. - Some applications require serial numbers, or have a copy protection mechanism to prevent multiple copies running simultaneously. When executing scripts for those application for more than one target, only the first copy of the application will be able to launch, all the others will get an error. The scripts for those applications are: 4D.vu, Canvas.vu, Mathematica.vu, and QuarkXpress.vu, PhotoShop.vu and Director.vu.
  130.  
  131.  
  132. Part I – Execution
  133. Setup & Execution
  134. The initial setup required to run a Virtual User automation suite can vary depending on the specifics of the test suite. This section describes the setup required to use SPEC S&L. The following instructions assume that VU is installed according to the guidelines presented in 'Setting Up and Running Virtual User'.
  135. Target Setup
  136. 1)  Install all applications to be tested on target hard drive. See section titled "The Cloning Process" for more information.
  137. 2)  Install the 'Agent VU' Extension.
  138. 3)  Name each target in the 'Machine Name' field of the 'Sharing Setup' CDEV.
  139. • This is done so that the target can be identified on the net.
  140. • It is necessary to reboot all targets after naming so that they can be registered on the network.
  141. 4)  Set the Key Repeat Rate to OFF in the 'Keyboard' CDEV.
  142. •  This is done so that typing will be accurate, and letters will not be unexpectedly repeated (This will cause error with our launching scheme).
  143. 5)  Select a printer driver in the 'Chooser'.
  144. • This is done because many applications require a printer to be selected prior to opening a new document.
  145. 6)  Insure that a copy of the VU external tool, OnTarget in located on all target machines. 
  146. • OnTarget is used to preflight all targets to insure that scripts can run on a given configuration (see gLaunchReqs).
  147. • To access OnTarget (or any other external tool) you must select the Sharing Setup CDEV and turn on Program Linking. 
  148. • To allow guest access: Open the Users & Groups CDEV, double-click on the <Guest> icon, and select the check box titled  'Allow guests to link to programs on this Macintosh' (see Host Setup for detail concerning AutoGuest).
  149.  
  150. 7)  Configure each target's system environment.
  151.     •  All software/hardware configurable system variables should be set prior to executing a test suite. For instance: if your test suite requires that the test be run in 32 bit addressing mode, it is important to place the machine in this state (either manually or automatically - by way of script) prior to executing the test.
  152.     •  Ensure the first element of the Scrapbook contains text. This can be accomplished by using any word processor to type the desired text and paste it onto the Scrapbook.
  153. 8) Launching Setup
  154. •  In order for the libraries to launch the intended application each of the application scripts references a global variable in the Globals.lib titled gAliasDirectory. This global variable is the name of a directory (or alias to a directory) in the Apple Menu, which contains the applications (or application aliases). 
  155.  To use the existing system:
  156. 1) Create and name a folder on the target hard disk: for example: '#Aliases''. This is the default name that is assigned to the global AliasDirectory.
  157. 2) Place an alias to this folder in the 'Apple Menu Items' folder.
  158. 3) Place aliases to all applications in the '#Aliases' folder.
  159. Note: The '#' sign precedes the name 'Aliases' so that it will be at the top of the Apple Menu, which is sorted alphabetically.
  160. An alternative method is to place the application (or its alias) in the Apple Menu directly.
  161. Host
  162. SPEC S&L requires Virtual User 2.0x, but does not require any unique setup for the host machine except for installing the AutoGuest extension (see below), and allocating enough memory to the Virtual User application via the Get Info box. When using SPEC S&L, 4 MB or more is recommended for V.U. Please refer to Setting Up and Running Virtual User  and/or Virtual User Language Reference Guide. 
  163. 1)  Install the AutoGuest Init
  164. • This is done so that the host will be able to automatically log onto all targets when making calls to external tools. AutoGuest allows guest access Program Linking to occur without any confirmation dialogs.
  165. The Cloning Process
  166. Keeping current versions of third party software on all target machines is critical to maintaining compatibility information. Cloning hard drives is a method used to update numerous target hard drives concurrently. The cloning process entails establishing a single hard drive, the 'Clone Master' with the latest version of each application to be tested. The Clone Master then needs to be copied to each of the target CPU's. 
  167. The section that follows details the steps to be taken when setting up the Clone Master and cloning it:
  168. 1)  Copy all of the applications (and appropriate files) to be tested to the Clone Master hard drive.
  169. Note: Normally only files which are required are copied to the Clone Master. Generally there are a lot of extraneous files in product packages,  these files can usually be removed to free disk space. 
  170. We have distinguished four types of files:
  171.     -  Files which are required for the application to launch
  172.     -  Files which are not required but test system functionality
  173.     -  Files which are not required and therefore extraneous
  174.     -  Sample documents
  175. 2)  After Clone Master has been updated, aliases to each of the applications need to be created. Place all aliases in a single folder (#Aliases), these will be used to launch the applications. 
  176. Note: Remember that the state of the Clone Master will directly effect the state of all hard drives cloned from it. Make sure that everything is set up the way you intend, otherwise a long and tedious process of manually updating all target drives may be necessary. The best way to test that your Clone Master is set up properly is to run a full series of scripts against the Clone Master. This will insure that all of the required files are available for each application. 
  177.     1) Double-click each alias to make sure the application launches.
  178. Note:  If an alias is made on the Clone Master the alias will not work on a drive that was directly copied from the Clone Master unless it is named the same.
  179. 2)  If an application has a special registration screen, such as Name, Password, etc. enter in the information necessary to dismiss this screen. (Applications that require unique serial numbers are a royal pain in the neck)
  180. 3) Check to insure that all required tools exist.
  181. - Macsbug, and Debugger Prefs, Agent VU, Programmer's Key, ResEdit, etc.
  182. 4) Check to insure all required files exist.
  183.         - Sample Files
  184. - Files needed for script execution, e.g. If Spell Checking is tested, is a dictionary present.
  185.         - Files necessary for launching.
  186. 3)  The final step of the clone process is to copy Clone Master to each target drive. There are two methods we normally use for cloning and/or updating drive(s). 
  187. A)  Finder Copy - 
  188.     1) Mount the Clone Master and the drive to be cloned.
  189.     2) Erased/ Reformat the drive to be cloned.
  190. 3) Select all the files on the Clone Master and drag them to the drive to be cloned.
  191. Note:  The names should be the same in order for the aliases to be resolved.
  192. B) GraceLAN - Update Manager tool.
  193.  
  194.  
  195. Part II – Development
  196.  Scripts Overview
  197. The scripts provided in this product are meant to serve as examples of developing tests based on the included libraries. All the scripts fall under the category of QuickLook test. The term QuickLook is used to define a set of tests that exercise a limited set of features of a given software product. In the context of SPEC S&L, the term QuickLook refers to a script that tests a limited set of features of a given third party application. The features that are tested in a QuickLook are generally features that are common between applications, such as: saving/opening files, resizing and closing windows, etc. For specific details concerning the features exercised within a QuickLook please refer to Appendix A: QuickLook definition. In this section we will be discussing the various elements that make up an application QuickLook script in detail. 
  198. The Elements That Make Up A Quicklook
  199. This section describes guidelines concerning various elements within the standard SPEC S&L QuickLook script.  Please refer to Appendix A: Standard QuickLook Definition  for information concerning the features tested in a QuickLook and Appendix B: Sample QuickLook for specific examples concerning QuickLook implementation.
  200.     
  201. There are five basic elements that make up a standard SPEC S&L script. 
  202. 1) Descriptive Header
  203. 2) Library Declarations
  204. 3) Application Specific Task Definitions
  205. 4) Script Declaration
  206. 5) Body Of The Script
  207.  In the following section we examine each of these elements in detail.
  208. Descriptive Header
  209. The descriptive header is used to provide basic information and a change history for the script. Below is a sample script header,  the information contained within it should be self-explanatory.
  210. #
  211. # *****************************************************************
  212. #
  213. #    File Name:    AppScript.vu
  214. #
  215. #    Contains:    QuickLook test script for myApplication v. 2.0
  216. #
  217. #    Written by:    Joe Bob Scripter
  218. #
  219. #    Copyright:    © 1993 by Apple Computer, Inc., all rights reserved.
  220. #
  221. # ********************************************************************
  222. #            C h a n g e        H i s t o r y (most recent first):
  223. # ********************************************************************
  224. #
  225. #        Vers      Date    Author        Description
  226. #        ----    --------    ------    ----------------------
  227. #        <1+>     5/25/93    Frank Lee    Adding header 
  228. #
  229. # ********************************************************************
  230. #
  231. Library Declarations
  232. Library declarations are necessary whenever a script makes a call to a task that is contained with in a library. For more information concerning tasks that are contained within each specific library please refer to Appendix E: Tasks within Libraries. The following example shows a sample library declaration. Note: The following sample library declaration contains the minimum libraries that are necessary for developing a Standard QuickLook.
  233. ####################################################################
  234. #                    External libraries 
  235. #===================================================================
  236. Libraries "Output.Lib", "DoTasks.Lib","Draw.Lib", "Font.Lib", "Globals.Lib", "LaunchQuit.Lib", "TCS.Lib";
  237. Application Specific Tasks
  238. The application specific tasks section of a script is the section that provides the script writer with the most flexibility. This section is where the script writer  should define any application specific data structures, tasks used for task overrides, as well as any additional application specific tasks. For examples on what is expected in the application specific tasks section please refer to either Appendix B: Sample QuickLook  or any of the SPEC S&L scripts.
  239. Script Declaration
  240. The script declaration indicates the beginning of the body of the script. It begins with the word “Script” followed by the script's title, which in terms is followed by the script parameter(s). For example:
  241. # Script Definition
  242. Script Sample (Param1, Param2...)
  243. Scripts written for SPEC libraries take advantage of the script parameter feature in V.U. to control the depth of testing to perform. Utilizing this technique, the script writer can provide flexibility to perform different complexity of tests by letting the person executing the script change the script parameters at run time. There are two ways to change the script parameters, using Virtual User's Setup menu or using a controller script to redefine the parameter. 
  244. The convention used for SPEC compliant scripts is one script parameter. For example:
  245. script MacDrawPro (ScriptLevel := -1)
  246. For more information see Controlling the Test Level section in Appendix G.
  247. Body Of A Script
  248. The body of the script is where the calls to individual tasks are made. The body of the SPEC S&L scripts begins with global definitions and initialization. After this, the next step is to launch the application to be tested. 
  249. Within the body of each QuickLook script there are five basic areas of functionality that are normally present.
  250. 1) Application setup - DoSetUpApp() 
  251. 2) Exercise drawing tools - DoDraw() 
  252. 3) Exercise text entry by changing fonts, sizes and styles - DoText() 
  253. 4) Exercise windows - DoWindow() 
  254.     5) Application completion routines - DoCloseApp() 
  255. 1) Application Setup
  256. The standard SPEC S&L QuickLook definition requires that  certain specific test cases are executed. Many applications handle these test cases in different ways, and some do not support them at all. There are a couple of high level miscellaneous tasks that were developed to handle a variety of application idiosyncrasies. For example, some applications display a default document window automatically when launched, others do not. The following is an example of the convention used to describe task definitions. For more details, see the heading “Conventions Used for Tasks Definitions” under the Library Overview section.
  257. return value    TaskName( parameter1, parameter2,...)
  258. nada    DoSetUpApp( pDismissOpeningDialog, pDefaultWindowSpec,                     pNewDocPath, pDismissNewDocDialog,pScrapText,                 pScrapPict, pSaveDoc, pOpenDoc)
  259. DoSetUpApp() is a high level task that calls the appropriate low-level tasks necessary to generate predefined QuickLook test cases. The parameters to DoSetUpApp() allow the script writer to specify the way to handle several application specific test cases including: Dismissing a dialog that appears after launching, define what is the default window specifier, the menu items required for selecting a new document, dismissing any dialogs that appear when creating a new document, whether or not the application supports text and/or PICT copied from the scrapbook, And whether or not to save the document. For more information see the task header of DoSetUpApp() in the DoTasks.lib.
  260. Examples:
  261. • DoSetUpApp(1,0,{"New","File"},1,1,1,1);    
  262. # After launching it will dismiss the dialog that appears, the document window is the first window that has a zoom and a close box, select the 'New' menu item from the 'File' menu, dismiss the dialog that appears, copy and paste text from the scrapbook, copy and paste a PICT from the scrapbook, and save the file.     
  263. • DoSetUpApp(0,1,{"New File","Document"}, 0, 0,0,0 );
  264.     
  265. # After launching there shouldn't be a dialog that appears, select the 'New File' menu item from the 'Document' menu, the document window is ordinality 1 but not the first one with a zoom and close box, no dialog should appear after selecting 'New File', it will not copy and paste text or a PICT from the scrapbook, and it will not save the file.     
  266. 2) Exercise Drawing Tools  - (see Performing Draw Operations)
  267. Note: using MouseTrapper may greatly enhance your ability to define the Draw structures.
  268. 3) Exercise Text Entry  - (see Exercising Fonts)
  269. 4) Exercise Windows  - (see Exercising Windows)
  270. 5) Application completion routines - DoCloseApp()
  271. nada    DoCloseApp( pSaveRevert, pDismissAboutBox, pPageSetup, pPrinter,             pQuit)
  272. DoCloseUpApp() is a high level task that calls the appropriate low-level tasks necessary to generate predefined QuickLook test cases. The parameters to DoCloseApp() allow the script writer to specify the way to handle several application specific test cases including: Save a document, modify it and then revert to the last save version, Whether or not it is possible to display the about box and dismiss it, whether or not to test Page Setup and/or  Print. For more information  See the task header of DoCloseApp() in the DoTasks.lib.
  273. Examples:
  274. • DoCloseApp(1,1,1,1,1);
  275.     
  276. # Save a document, modify it and then revert to the last saved version, then select the 'About' menuItem, and click in the center of the screen once to dismiss it, and do whatever Page Setup and Printer tests were defined.     
  277. Scripts Included With This Package
  278. SPEC S&L includes over 20 Virtual User scripts written using the techniques previously mentioned. They exercise some of the most popular Macintosh applications and are a good source of examples. See Appendix C for a complete list of the SPEC S&L scripts.
  279. Libraries Overview
  280. Many of our libraries rely on routines that are contained in separate library files. We have attempted to limit dependencies where possible. However, in order to organize them logically, retaining modularity, certain dependencies were necessary. The layer model discussed in a later section (SPEC S&L Layer Model) simplifies the dependencies  See Appendix D for a list of the library dependencies.
  281. How To Use The Libraries
  282. The SPEC S&L libraries are provided so that you can build your custom libraries and test scripts based on the tasks in them. The libraries have tasks that are published for use and some supporting tasks that are not meant for use by you. These unpublished tasks may change in future and/or will not be supported. They are there to make the other published tasks work. 
  283. You can use any of the published tasks in the SPEC S&L libraries. The published tasks are marked (accessible from the Mark menu in MPW). We follow the convention of defining published tasks using the uppercase word TASK. For example:
  284. TASK SelectMenuItem(menu1, menu2 := "", menu3 := "") 
  285. begin
  286. .
  287. end;
  288. is a task that is published for you to use from your custom libraries and scripts. Do NOT edit any of the files in the SPEC S&L package. All the text files are provided to you with the read-only flag set. If you have a need to enhance any particular library, consider the options given later in this section. 
  289. Library Task Benefits
  290. Many of the tasks in the lower layer libraries, (see SPEC S&L Layer Model), like UserInterface.Lib, have parallel functions provided in the Virtual User scripting language. The benefit of calling the tasks in the libraries, as opposed to making Virtual User primitive calls, is that the tasks in the libraries perform error checking, log results and return result values. For example:
  291.         
  292.         • The library call:
  293.              SelectButton("OK");
  294.         • Replaces the VU primitive call:
  295.             Select[button t:'OK'];
  296. The call to the library will:
  297.     Check - to see if the button exists and is enabled.
  298.     Log - Selected button titled 'OK'.
  299.     Return - the name of the button that was selected.
  300.     
  301.     Note: The libraries make Virtual User primitive calls
  302. Adding To / Modifying The Libraries
  303. Before you decide to add to, or modify the libraries, consider all your options. 
  304. Hooks:
  305. This package provides a number of undefined task references (hooks) for convenience when customizing your tests. Refer to the section, "Hooks Provided in SPEC S&L" in Appendix G, for more information.
  306. Redefine Default Values:
  307. Use Custom.Lib to redefine global variables via the task InitCustom(). InitCustom() is called by InitGlobals() after all globals have been defined. Using this method does not require altering any other library in the package.
  308. Add functionality:
  309. Build a library of your own that has tasks with new names that act as wrappers around the tasks in the library from the SPEC S&L package. Now you can add any enhancements to this customized library.
  310. Modify Tasks:
  311. Copy the task to be modified into your script or custom library, rename the task to something different and make the changes you want. From now on you have disassociated this task from the one in SPEC S&L package. This helps in two ways: first, in a future version of SPEC S&L if this task is modified your version of the task will not be adversely affected; second, you can still use the original task for other purposes where the modification is not required.
  312. Fixing A Bug In The Libraries
  313. This is something we would like you not to face. But if you do discover a bug in the SPEC S&L, first report the problem to us using RADAR. If you need a fix immediately and cannot wait for the next release of SPEC S&L, then please adopt the approach mentioned above for modifying SPEC S&L until a fix is made available.
  314. Conventions Used For Task Definitions
  315. The tasks defined in these libraries follow the convention indicated below in italic text:
  316. return value    TaskName( parameter1, parameter2,...)
  317.     return value    can be any VU valid type or nada (none), always listed on the left margin
  318.     TaskName  always indicated in bold/italicized text
  319.     ( parameter1, parameter2,...)   parameters separated by commas
  320. All the parameters inside a task definition begin with the letter “p”. For more information about particular parameters, default values, etc. see the task header inside the library.
  321. SPEC S&L Layer Model
  322. SPEC S&L is intended to provide an insight into, and a solution for, some of the many issues that arise in developing an automation process. SPEC S&L's libraries are a compilation of tasks (procedures) that provide a variety of functions. They have been organized into layers based upon function. Libraries in lower numbered layers do not depend on any library in  higher numbered layer.
  323.     Layer I         • Fundamental data structures and then manipulation
  324.                 • Output formatting and redirection
  325.                 • Shared Global variable initializations
  326.                     Custom.Lib
  327.                     Geometry.Lib
  328.                     Globals.Lib
  329.                     OutPut.Lib
  330.                     String.Lib
  331.                     Utility.Lib
  332.     Layer II         • External tool specifications and supporting tasks
  333.     
  334.                     FileTool.Lib
  335.                     OnTarget.Lib
  336.                     MathTool.vulib
  337.     Layer III         • Basic user interactions on the target
  338.                     Gestalt.Lib
  339.                     Palette.Lib
  340.                     StandardFile.Lib
  341.                     TCS.Lib 
  342.                     UserInterface.Lib
  343.             
  344.     Layer IV         • High-level task oriented user interactions on the target
  345.                     Draw.Lib
  346.                     Font.Lib
  347.                     LaunchQuit.Lib
  348.                     Print.Lib
  349.                     Select.Lib
  350.                     TargetCheck.Lib 
  351.                     Text.Lib
  352.     Layer V         • General support for using libraries on the lower layers
  353.                     DoTask.Lib
  354.     Layer VI        • Application specific tests
  355.                     DA.Lib
  356.                     WordProcessor.Lib
  357. Exercising Window Features
  358. Overview
  359. SPEC S&L contains a collection of several tasks which support exercising the many standard window features, including: closing, zooming, resizing, scrolling, etc. This section describes the routines support testing window functionality. 
  360. Specifier is a parameter used throughout the window tasks. This parameter refers to a window specifier and can be one of three types. It is possible to specify a window by name by passing in the name of the window as a string, e.g. ZoomWindow('Untitled').
  361. It is also possible to specify a window by ordinality by passing in an integer, e.g. ZoomWindow(1). If a more complete window descriptor is required it is possible to pass any partial or complete window descriptor, e.g. ZoomWindow([window t: 'Untitled' c: true s:Dialog]). If a specifier is set to 0 then actions will take place on the front document window, e.g. ZoomWindow(0). We have defined the front document window as the front most window that contains a closebox and a growbox. If your applications front document window does not contain a closebox and a growbox then you will be required to pass in the proper specifier.
  362. Calling The Window Tasks
  363. nada    DoWindow( pTestMethod, pSpecifier, pRestoreWindow, pNumTimes ) 
  364. DoWindow() is a high level task that calls the appropriate low-level tasks necessary to perform predefined window test cases. There are several different test methods available for DoWindow() these are discussed in detail below. It is possible to use the global gWindowMethod to set the test method, only if no parameters are passed to DoWindow(). This is because parameters take precedence over gWindowMethod . 
  365. Note: DoWindow() is the only task within the window routines  not contained in UserInterface.Lib, it is contained in DoTasks.Lib. If some of the tests performed by a particular TestMethod in DoWindows() are not available for a specific application it is possible to define which tests are available by setting the appropriate flags in the global gDoWindowList.
  366. Examples:
  367. • DoWindow(0);        # Nothing - DoWindow() will not execute.
  368.          
  369. • DoWindow(1);         # Completed set of window tests
  370.      
  371. • DoWindow(2);        # QuickLook set of window tests
  372. • DoWindow({1,3,5,7,9});    # Pass in a set of window tests
  373.                     # (See TestWindow() description
  374.                     # below)
  375. integer    TestWindow( pSpecifier, pFunctionList, pRestoreWindow, pNumTimes,         pDragXY ) 
  376. Performs the specified functions as defined in the input parameter pFunctionList. If pFunctionList is not passed, or is passed as 0, then the following operations are performed on the window specified by input parameter pSpecifier. The default behavior will perform the following behaviors on the front most document window.
  377. Listed below is the list of function numbers and a brief description of what that particular function does:
  378. 0    Complete Window Test - Performs functions 1 through 17
  379.     (17 is done twice - zoom & zoom back)
  380. 1    Resize to random width and height.
  381. 2    Attempt resize to 20,20 (should not allow it)
  382. 3    Scroll the vertical scroll bar to random location.
  383. 4    Scroll the vertical scroll bar to end location.
  384. 5    Scroll the vertical scroll bar to beginning location.
  385. 6    Scroll the vertical scroll bar to original location.
  386. 7    Scroll the horizontal scroll bar to random location.
  387. 8    Scroll the horizontal scroll bar to end location.
  388. 9    Scroll the horizontal scroll bar to beginning location.
  389. 10    Scroll the horizontal scroll bar to original location.
  390. 11    Resize window to largest possible and then
  391. 12    Resize back to smallest window size
  392. 13    Size window across screen border to second screen (if 2 screens) and back.
  393. 14    Drag window across screen border and back
  394. 15    Drag random location and back to original location
  395. 16    Drag window back to original location.
  396. 17    Zoom.
  397. 18    Complete Window Size Test
  398.         Performs functions 1, 2, 11, 12, and 13
  399. 19    Complete Window Scroll Test
  400.         Performs functions 3, 4, 5, 6, 7, 8, 9, and 10
  401. 20    Complete Window Drag Test
  402.         Performs functions 14, 15, and 16
  403. 21    Complete Window Zoom Test
  404.         Performs function 17 twice (zoom - zoom back)
  405. 22    A More Complete Window Scroll Test
  406.         Performs functions 2, 3, 4, 5, 6, 7, 8, 9, and 10.
  407. Note: This is the same as 19 except it sizes the window to the smallest possible size. This is better in that it is more likely for the scrollbars to be active.
  408. 23    A More Complete Window Drag Test
  409.         Performs functions 2, 14, 15, and 16
  410. Note: This is the same as 20 except it sizes the window to the smallest possible size. This is better in that it is more likely for the window to be able to be dragged across screen boundaries.Examples:
  411. • TestWindow();     # Complete window test on frontmost document window
  412.          
  413. • TestWindow(1, 12);     
  414. # Drag the frontmost window across the screen border and back.
  415. • TestWindow(0, {1,2,3,5}, 1,2);    
  416. # Perform tests 1,2,3,5 on the frontmost document window twice, restores the window to its original condition when done.
  417. integer    DragAcrossScreens( pSpecifier, pDragXY )
  418. This task provides a mechanism to drag a window across multiple monitors. In order to drag a window across multiple monitors the target machine must be configured with multiple monitors. This task will verify that multiple monitors are available, if they are not nothing will be done, and the appropriate return values will be returned.
  419. Examples:
  420. • DragAcrossScreens(0);    
  421. # Drag the frontmost document window across multiple monitors if they are present.
  422. integer    SizeAcrossScreens( pSpecifier, pDragXY )
  423. This task provides a mechanism to size a window across multiple monitors. In order to size a window across multiple monitors the target machine must be configured with multiple monitors. This task will verify that multiple monitors are available, if they are not nothing will be done, and the appropriate return values will be returned.
  424. Examples:
  425. • SizeAcrossScreens(0);    
  426. # Size the frontmost document window across multiple monitors if they are present.
  427. integer    DragWindow( pHorizontalPixels, pVerticalPixels, pSpecifier,             pAbsolutely )
  428. This task provides a mechanism to drag windows either to specified locations or randomly.
  429. Examples:
  430. • DragWindow();    # Randomly drag the frontmost document window.
  431. • DragWindow(25,50, "Untitled", 0 );
  432. # Drag the window titled 'Untitled' 25 pixels horizontally,  and 50 pixels vertically relative to the windows current location.
  433. integer    SizeWindow( pPixelsWide, pPixelsHigh, pSpecifier, pAbsolutely )
  434. This task provides a mechanism to size windows either to specified locations or randomly.
  435. Examples:
  436. • SizeWindow();    # Randomly size the frontmost document window.
  437. • SizeWindow(25,50, "Untitled", 0 );    
  438.                 
  439. # Size the window titled 'Untitled' 25 pixels horizontally, and 50 pixels vertically relative to the windows current size.
  440. integer    ZoomWindow( pSpecifier )
  441. This task provides a mechanism to zoom specified windows.
  442. Examples:
  443. • ZoomWindow();            # Zooms the frontmost document window.
  444. • ZoomWindow("Untitled");    # Zooms the window titled 'Untitled'.
  445. integer    CloseWindow( pHowClose, pOverwrite, pSpecifier, pNewDocName )
  446. This task provides a mechanism to close specified windows. There are three possible ways to close a window, closebox, close menu item, and keyboard equivalent. Using the first input parameter, pHowClose, it is possible to specify the method desired to close the window. If changes to a document are made prior to closing, a dialog appears asking whether to save the changes or not, the saveFlag parameter enables you to specify whether or not you want to save the document, and the newDocName allows you to specify what to name the document if it hasn't been saved before. 
  447. Examples:
  448. • CloseWindow();    
  449. # Close the frontmost document window by selecting the close box, will save the document if needed.
  450. • CloseWindow(2,0,1);    
  451. # Close the frontmost window by way of a keyboard equivalent, will not save the document.
  452. • CloseWindow(1,1,0,"myDoc")
  453. # Close the frontmost document window by selecting the 'Close' menu item, will save the document if needed with he name 'myDoc'.
  454. integer    ScrollWindow( pWhichScrollBar, pDesirePosition, pMaxPosition )
  455. This task provides a mechanism to scroll windows using either the vertical or the horizontal scrollbars.
  456. Examples:
  457. • ScrollWindow('H',1,2);    
  458. # Scroll the document windows horizontal scrollbar to the position 1/2.
  459. • ScrollWindow("V", 0,1);    
  460. # Scroll the document windows vertical scrollbar to the topmost position.
  461. Performing Standard File Operations
  462. Overview
  463. SPEC S&L contains a collection of tasks which support many of the features of Standard File, including: saving files, opening files, navigating directories, etc. This section describes the routines that make up StandardFile.Lib. 
  464. Most of the tasks that support Standard File allow the script writer to pass parameters into tasks to perform a specific operation. For example,  SaveAs() takes a file name as a parameter allowing the scriptwriter to specify the name of the file to be saved. There is one very high level task, DoFiles(), that automatically tests several features of StandardFile. For example, DoFiles(2) will: Save a file (if a document with the same name already exists it will be replaced), close the file, reopen the file.
  465. The Standard File library tasks will only work with System 7.0 or greater. The reason for this is because of the way in which navigation and selection of files occurs within the Standard File support tasks. Files and folders are selected by what is referred to as "Type Selecting". "Type Selecting" means selecting the desired item by typing its name.  While this is effective when the desired files and folders exist, it can cause problems when they do not.  While we have done some error checking to help insure that the expected behavior is actually occurring,  proper set up of the target machines can greatly enhance the probability of success. NOTE: Since we use "Type Selecting" it is possible that only specifying the first couple of letters of each path element will actually navigate correctly, for example, The path  {"myHardDisk", "Folder1", "myDocuments"}  could possibly have been specified as {"myH", "Fol", "myDoc"}. Please use caution when using this method, since it is far less descriptive of what the desired result should be.
  466. Calling The Standard File Library
  467. nada    DoFiles( pTestMethod, pFileName, pSaveAsFlag, pSelectOpen,                 pRevertMI ) 
  468. DoFiles() is a high level task that calls the appropriate low-level tasks necessary to generate predefined Standard File test cases. There are several different test methods available in DoFiles, These are discussed in detail below. It is possible to use the global gFileMethod to set the test method, only if no parameters are passed to DoFiles(). This is because parameters take precedence over gFileMethod. 
  469. Note: DoSetUpApp, and DoCloseApp() make specific calls to DoFiles() within the Standard SPEC S&L QuickLook framework. Dofiles is the only task within the Standard File libraries not contained in StandardFile.Lib. It is contained in DoTasks.Lib.
  470. Examples:
  471. • DoFiles(0);    # Does nothing - DoFiles() is turned OFF         
  472. • DoFiles(1);    # All of the file tests below 
  473. • DoFiles(2);    # Save a File, close it, reopen it.
  474. • DoFiles(4);    
  475. # Select Save As, Cancel, Save with a unique name, Save As with the same filename (replace the existing one), Save as with the same name (add file name extension to generate a new file).
  476. • DoFiles(5);    # Select Save As, Cancel, select Save.
  477. integer    SaveAs( pNameDoc, pReplaceFlag, pSelectSaveAs, pPathlist ) 
  478. SaveAs() provides the ability to navigate through Standard File and save files. This routine allows the scriptwriter to specify whether or not to replace an existing file with the same name. The <Pathlist> parameter should be specified  as a full pathlist, with the name of the drive as the first element.
  479. Examples:
  480. • SaveAs();            
  481. # Verifies a Standard File dialog is present, generates a filename based on the current application and the time of day, saves the file.
  482. • SaveAs("myFile", 0);    
  483. # Will not select the 'Save As' menu item (but will verify that Standard File is present), name the file 'myFile', and if a file with  the same name exists a new file name will be generated. The new file name is based on the existing filename appended with the time of day. 
  484.     
  485. • SaveAs("myFile", 1, 1);    
  486. # Select the 'Save As' menu item, name the file 'myFile', and replace a file with the same name if one exists.
  487.     
  488. • SaveAs("myFile", 1, 0, {"HD", "Folder1"});    
  489. # Checks to verify that Standard file is already present, navigate to the specified path, name the file 'myFile', and replace a file with the same name if one exists.    
  490. integer    OpenFile( pNameDoc, pSelectOpen, pPathList, pPartialPath, ) 
  491. OpenFile() provides the ability to navigate through Standard File and open files. The <Pathlist> parameter should be specified  as a full pathlist, with the name of the drive as the first element. This is true unless the <PartialPath> flag is set indicating that navigation should begin from the current directory downward.
  492. Examples:
  493. • OpenFile("myFile");    
  494. # Selects the 'Open' menu item, types "myFile" to select the desired file, and presses the return key to open, then verifies that 'myFile' was opened properly.
  495. • OpenFile("myFile", 2);
  496. # Presses the keyboard equivalent Command-'o' to select the 'Open' menu item, types "myFile" to select the desired file, and presses the return key to open, then verifies that 'myFile' was opened properly.
  497. • OpenFile("myFile",1,{"HD", "Folder1"});    
  498. # Selects the 'Open' menu item, selects the 'DeskTop' button and navigates the specified path, types "myFile" to select the desired  file, and presses the return key to open, then verifies that 'myFile' was opened properly.
  499. • OpenFile("myFile",1,{"myDataFolder", "ThisWeeksData"}, 1);
  500. # Selects the 'Open' menu item, navigates the specified path, types "myFile" to select the desired file, and presses the return key to open, then verifies that 'myFile' was opened properly.
  501. integer    Revert( pRevertMI ) 
  502. This task will attempt to revert the current document back to the last saved version by selecting any menu item that contains the word "Revert". It will then attempt to dismiss any confirmation dialog that appears. If RevertMI is defined as the menuItem for revert, it will be selected. Otherwise a menuItem with the word 'Revert' in it will be selected. A dialog will normally appear confirming the revert request. Several methods will be used when attempting to dismiss the dialog. Attempts to match buttons "OK", "Yes", "Revert", are made, then typing the return key. If RevertMi is defined, then DialogCheck() will be called to output the static text in the dialog and the type the return key.
  503. Examples:
  504. • Revert();
  505. integer    IsStandardFile( pLogIt ) 
  506. This task checks to see if a Standard File dialog is present and returns 1 if it is present and 0 if it is not. All of the routines in the Standard Files Libraries call this task to determine if Standard File is present. Since it is possible to customize Standard File it is difficult to find a descriptor that will insure that Standard File is actually present. 
  507. Examples:
  508. • IsStandardFile();
  509. integer    CancelStandardFile( pHowCancel, pSaveAsMenu ) 
  510. This tasks selects cancel for the Standard File dialog. The main reason this is a task provided by Standard File library  is that is a common test case for the SPEC S&L Standard QuickLook.
  511. Examples:
  512. • CancelStandardFile();    
  513. # Presses the keyboard equivalent Command-'.' to cancel
  514. • CancelStandardFile(1);    # Selects the 'Cancel' button
  515. nada    Save( pSaveMethod ) 
  516. This task selects the 'Save' menu item. If a Standard File dialog appears, indicating the file has not been saved previously, the task SaveAs() is called. The main reason this is a task provided by Standard File library  is that is a common test case for the SPEC S&L Standard QuickLooks.
  517. Examples:
  518. • Save();        
  519. Exercising Fonts
  520. The 'Font.Lib' contains VU code for exercising fonts, styles, and sizes. There are three modes of font testing currently defined. These can be executed by calling DoText with certain global variables set appropriately. The following section details the proper global settings to execute the various test methods. All of the methods are based on the execution of a FontRecord which  consists of three elements {"FontName", "SizeName", {StyleList}};  For example: ourFontRecord := {'Geneva','12',{'Bold','Italic'}};
  521. Font Related Global Variables 
  522. In order to execute any of the font testing methods there are a series of global variables that must be defined in the task InitFonts(). 
  523. NOTE:  These global variables are actually used as constants. We have defined default settings for these global variables in Fonts.Lib. If the script that you are developing requires changes to the default values these should be made by overriding them within the script. 
  524. All font characteristics are generated from the predefined global font lists: gFontList, gFontSizeList, gFontStyleList. Define these lists with appropriate Fonts, Sizes and Styles. These are the first block of global variables in InitFonts().
  525. DO NOT define the second block of global variables (gCurrFontMenu, gCurrSizeMenu, gCurrStyleMenu). These global variables will be automatically defined. They store the titles to the menus which contain the font characteristic menu items.
  526. The global gPlainStyle should be defined as the menu item which clears all font styles.
  527. The global gNextLineMethod should be defined as the appropriate method which a particular application requires to be prepared to enter the next line of text. 
  528. This global should be set to one of the following settings:
  529. 1 - ReturnKey
  530. 2 - Enter Key
  531. 3 - Down Arrow Key
  532. 4 - Tab Key
  533. {<Optional Specifier>} - if no specifier will select the first document window with close and grow box. 
  534. See Appendix G for more info on gNextLineMethod
  535. The global gNextLineClearsFontSettings should be set to a 1 if the method of moving to the next line of text clears all the font settings. It should be set to 0 if moving to the next line retains the font settings - ( important if the test method is 3 - see below)
  536. Test Methods
  537. • Random method - 1
  538. 1) Set gFontMethod to 1. (i.e. global gFontMethod := 1;)
  539. 2) Set gNumRandomFontTests to equal the number of random text records. 
  540. (i.e. global gNumRandomFontTests := 5;)  For 5 random text records
  541. 3) Call DoText();
  542. - The FontRecord generated will include a random Font, a random size,
  543. and a random number of random styles.
  544. • QuickLook method - 2
  545. 1) Set gFontMethod to 2. (i.e. global gFontMethod := 2;)
  546. 2) Call DoText();
  547. - This will generate 1 FontRecord for each font with a random size and a random combination of styles.
  548. • Waterfall method -3 
  549. 1) Set gFontMethod to  3. (i.e. global gFontMethod := 3;)
  550. 2) Be sure the global gNextLineClearsFontSettings is set correctly (See above)
  551. 3) Call DoText();
  552. - This will generate 1 FontRecord for each font with every size and combination of styles. For example, the first record may be {"Helvetica", '12', {'Bold'}}; and the second record might be {"Helvetica", '12', {'Bold', 'italic'}}
  553. Performing Draw Operations
  554. Using Palettes
  555. This section describes the way to set up various structures to implement the draw libraries. Each application will have a unique set of tools contained within its own palettes. The following sections outline the requirements for using the Draw Libraries. Since these are unique for each application, the structure must be set up for each application and contained within an initialization routine for that application.
  556. The Palette Structure
  557. This section describes the setup required to use the palette section of the libraries.
  558. First you must identify which type of palette is utilized. There are three main types of palettes that the Draw Libraries function with:  (1) Palettes that are contained within the document window (kPalDocWind),  (2) palettes that are contained within pop up menus (kPopUpPal),  (3) and palettes that are contained within their own floating windows (kPalWind).
  559. Once the type of palette is identified,  a Palette Structure must be defined.
  560. Note:  Each palette type that is defined will be added to the gPaletteList.
  561. Example of a generic Palette Structure:
  562.     global gPaletteList :=    {
  563.         {                
  564.         {Specifiers},            # Different for each type of                             # palette
  565.         PaletteType,            # Palette type
  566.         {numElemsWide,numElemsTall},    # Size of Tool matrix 
  567.         {H,V}                    # Offset between tools
  568.         }
  569.                     };
  570. The kPalDocWind Palette 
  571. This section describes the setup required for using (kPalDocWind) palettes. Initially this type of palette was defined as palettes where a part of applications document window is reserved for tools. However, this palette definition has been extended to include any palette where it is necessary to define the coordinates for the palette. kPalDocWind palettes can be defined relative to the applications document window, a separate window, or in global coordinates. MacDraw Pro utilizes a kPalDocWind, which is relative to its document window,  for its main drawing tools.
  572.  Note:  Tools contained within palettes of this type must be the same size and the same distance apart.
  573. kPalDocWind
  574. Palette that is defined by coordinates. 
  575. Example of a Palette Structure with a single kPalDocWind palette defined:
  576.     global gPaletteList :=    {
  577.         {
  578.         { 0, 21, 25, 228, (0)},    # Rect that contains tools/                             # Relative indicator
  579.         kPalDocWind,        # Palette type
  580.         {1, 12},            # Size of Tool matrix 
  581.         {0, 17}            # Offset between tools
  582.         }
  583.                     };
  584. The kPopUpPal Palette 
  585. This section describes the setup required for using a palette that is contained within a pop up menu or button (kPopUpPal). This type of palette in which the tools contained in the palette are not visible until the mouse is pressed at a particular point. MacDraw Pro utilizes this type of palette for colors in its color palette.
  586. Note:  Tools contained within palettes of this type must be the same size and the same distance apart.
  587. kPopUpPal
  588. Palette that is defined by coordinates. 
  589. Example of a Palette Structure with a single kPopUpPal palette defined:
  590.     global gPaletteList :=    {
  591.     {                
  592.         { 152, 29, 148, 44 },    # PopPoint, TopLeft, (AbsoluteFlag                             (optional))
  593.         kPopUpPal,            # Palette type
  594.         { 21, 8 },            # Size of Tool matrix 
  595.         { 10, 10 }            # Offset between tools
  596.     }
  597.                     };
  598. The kPalWind Palette 
  599.  
  600. This section describes the setup required for using a palette that is contained within its own window (kPalWind). MacDraw Pro's pattern palette (once 'pulled off') will be contained within its own window. 
  601.  
  602. Note:  Tools contained within palettes of this type must be the same size and the same distance apart.
  603. kPalWind
  604. Palette that is defined by coordinates. 
  605.  
  606. Example of a Palette Structure with a single kPalWind palette defined:
  607.     global gPaletteList :=    {
  608.     {                
  609.         { 'Patterns', 34},        # { Window containing tools,                             # HeaderHeight }
  610.         kPalWind,                # Palette type
  611.         {8, 8},                # Size of Tool matrix 
  612.         {16, 16}                # Offset between tools
  613.     }                
  614.                     };
  615. Using Tools
  616. Defining the palette structure is only the first step in using the Draw Libraries. By definition, each palette contains a number of tools. Each one of these tools may have a variety of behaviors. Some tools are used for drawing or selecting, others are used to enter text. Tools can be used to render objects of any shape and may allow patterns, line weights, and/or colors. The following section explains the setup required for using a variety of tools which may or may not be used with the palettes described above. 
  617. In order to make use of the Draw Libraries,  tools structures for each tool in a given palette must be defined.
  618.     
  619.     
  620. Tool Number
  621. To access tools in a given palette the location of the tool within the matrix must be known. In order to do this, the tool number is used as a multiplier. It is important to number the tools correctly, so that the specified tool will be the expected one. Tools are numbered from left to right, top to bottom.
  622. Example:
  623.     
  624.  
  625. Palette Number
  626. Palettes are numbered based on the order in which they appear in the global gPaletteList (or Palette Structure). All of the information concerning the actual selection of a tool from a palette is contained within the Palette Structure (detailed in the preceding section). Several routines within the Draw Libraries also need to access palette information  <SetPattern, SetLine, SetColor>. In order to do so, they must index into the Global gPaletteList. Since palette information is specific to a particular palette, accessing the correct palette information is critical. 
  627. Once the global gPaletteList  (or Palette Structure) is setup, global variables indicate the order in which palette information is specified within the Structure. 
  628. Set the following global variables as appropriate:
  629.     global kToolPaletteNum := 1; 
  630.     global kColorPaletteNum := 2;
  631.     global kPatternPaletteNum := 3;
  632.     global kLinePaletteNum := 4;
  633. The number assigned to each of the above palette globals has to correspond to its ordinal position within the list of palettes that you defined in global gPaletteList. (i.e. If you define the tool palette first in the global gPaletteList, the global kToolPaletteNum should be set to 1.)  See the sample QuickLook in Appendix B.
  634. Example:
  635.     
  636. Tool Name
  637. The Tool Name field within a tool structure is used for logging purposes so that it is possible to differentiate between tools other than by number. Set this field to a string which is descriptive of the tools function.
  638. Example:
  639.     
  640. Tool Type
  641. The Tool Type field within a tool structure is one of the most important fields because it indicates how to use the tool once it has been selected. There are five types of tools that the Draw Libraries currently function with: kClick, kDrag, kMultiClick, and kMultiDrag, kDragClick.
  642. 0 (Zero)  -    Tool does not have a type, tool will be selected but not 'used'.
  643. kClick -    Tools that only require the user to move to the desired destination and click the mouse button, are considered kClick tools. 
  644. kDrag -     Tools that require the user to press the mouse button move to a new location, and release the mouse, are considered kDrag tools.
  645. kMultiClick -      Tools that require the user to click to initiate the tool, move to any number of new locations, clicking at all corner points, and then double click to end (optional), are considered kMultiClick tools.
  646. kMultiDrag -     Tools that require the user to press the mouse, move to any number of new locations, and release the mouse button to end, are considered kMultiDrag tools.
  647. kDragClick -     Tools that require the user to press the mouse button, move to a new location and release the mouse, then click the mouse button are considered kDragClick tools.
  648. Note: It is possible to specify whether a double click is necessary to end for any tool type.
  649. Example:
  650.     
  651. DblClkFlag
  652. The DblClkFlag field within a tool structure is used to indicate whether a double click is necessary to end usage of the tool. Setting the DblClkFlag (nonZero) indicates a double click is necessary, and when the last point of an object is drawn a double click will be issued by Virtual User. Setting the DblClkFlag to 0 (Zero) indicates that a double click is not necessary and one will not be issued by Virtual User.
  653. Example:
  654.     
  655. Attributes
  656. The Attributes field within a tool structure is one of the more complex fields mostly because the first element has several meanings. As mentioned briefly in the previous section (more to come in the following section) tools can be associated with Text, Patterns, Line weights and Colors. The flags within the Attributes field deal with a tool's ability to handle these attributes. 
  657. The first element indicates when/if to set specific attributes concerning an object that is to be created with the tool. It can be set to four valid settings: 0 (Zero) indicates the tool does not accept any attributes (no patterns, no line weights, and no colors),  1 indicates that at least 1 of the attributes is appropriate, and that the attribute(s) should be set prior to drawing the object (after selecting the tool),   2 indicates that at least 1 of the attributes is appropriate, and that the attribute(s) should be set after drawing the object (many objects stay selected after drawing),  a text string indicates that the string should be typed after the object is drawn. 
  658. All of the flags (PatternFlag, LineWeightsFlag, ColorFlag) function in the same manner. If the flag is set (nonZero) then the attribute is appropriate for that tool.. If the flag is not set (Zero) than the attribute does not apply to the tool. It is important to realize that even if the indicator is set to a 'string', attributes can still apply. Also if the indicator is not set (Zero), all of the other flags will be ignored (therefore setting the Attributes Field to {0} is identical to setting it to {0,0,0,0}, or for that matter {1,0,0,0} and {2,0,0,0}). 
  659. Example:
  660.     
  661. Direct Coordinate Tools
  662. Direct Coordinate tools are tools that require selection by coordinate instead of through a palette structure. This may be required if tools are not contained within a palette, or the tools do not fit the rule of being the same size and same distance apart. It is important to realize the only thing that changes is the method of selecting the tool. The tool retains all of its other characteristics. Since Direct Coordinate tools are not contained within a palette the structure element for Palette Number has a new meaning. This field is used for the coordinates for the point that when clicked will select the tool. These can be in global coordinates (default) or relative to the front document window by setting a relativeFlag.
  663. Example:
  664.     
  665.     
  666.     
  667. Using Objects
  668. As discussed briefly in the previous section,  drawing tools can behave in different ways within the same application, not to mention other applications. A different set of attributes may apply for any given tool. The Object Structure is used to specify the attributes to set when drawing a given object.
  669. The elements within an object structure include: (1) Tool Structure (see Tool Structure section), (2) Pointlist  (3) PatStruct, (4) LineStruct,  and (5) ColorStruct.
  670. Example Object Structure:
  671. MyObject  :=      { 
  672.     global LineTool,          # Tool Structure
  673.     {{100,50}, {50,100}},        # Point List 
  674.     {15, 2, 'Pattern'},         # PatStruct
  675.     {6, 3, 'Line'},             # LineStruct
  676.     {24, 4, 'Color'}            # ColorStruct
  677.             };
  678. In the example Object Structure above, the specified course of action is: 
  679.     1)  Select the Line Tool.
  680.     2)  Select the 15th element in the Pattern palette (2nd palette struct in gPaletteList).
  681.     3)  Select the 6th element in the Line palette (3rd palette struct in gPaletteList).
  682.     4)  Select the 24th element in the Color palette (4rd palette struct in gPaletteList).
  683.     5)   Move to the point (100, 50), relative to the top left corner of the document window, and pressMouse.
  684.     6)  Move to point (50, 100) , relative to the top left corner of the document window, and releaseMouse.
  685. Assumptions: All the Attributes flags in the tool structure are set (nonZero),  and that the first Attributes flag (the Indicator flag) is set to 1, indicating that attributes should be set prior to drawing the object.
  686. Tool Structures 
  687. See the Tool Structures section previously mentioned.
  688. PointList
  689. PointLists are lists of points (within the current document window) which will define the object to be drawn.
  690. - Tools that are defined as type kClick require only one point.
  691. - Tools that are defined as type kDrag require two points.
  692. - All multi-point tools (kMultiClick and kMultiDrag) require at least two points. See gNumPoints in Appendix G.
  693. Attribute Structures
  694. PatStruct, LineStruct, ColorStruct
  695. The last three elements of an object structure are attribute structures. Different attributes will apply to various tools. Attributes have been defined as Pattern, Line and Color,  however these are merely labels and any attribute that is selected from a palette could be substituted. For instance,  setting up a structure for a gradient palette and setting the gradient as an attribute instead of a color would be perfectly acceptable. 
  696.     
  697. Example Attribute Structure:
  698.     
  699. Currently, the third element of an object structure, the PatStruct, is passed to SetPattern(), the fourth element of an object structure, LineStruct, is passed to SetLine(), and the fifth element of an object structure, ColorStruct, is passed to SetColor(). There are override capabilities, so that you are not limited to selecting attributes from a palette. See gSetPattern, gSetLine, gSetColor in Appendix G.
  700. Example of Attribute Structures within an Object Structure :
  701. Note:  While an object structure can have defined Attribute Structures, if a tool's structure indicates that a particular attribute is not applicable (Attribute flag set to 0),  the attribute will not be set (see Attributes section for details).
  702. Example of a Tool Structure with an Attribute flag set to 0 :
  703.     
  704. Attribute Number
  705. This is the number of the desired element within the specified palette ( see the Tool Number section for details concerning the numbering of tools).
  706. Palette Number
  707. This is the number of the palette containing the desired element. This should correspond to the order in which the palette structure appears in the global gPaletteList. ( see the Palette Number section for details concerning the numbering of palettes)
  708. Descriptive String
  709. The descriptive string is merely a way of reporting information that represents what has occurred. Stating that the fifth element of the second palette was selected does not adequately describe what took place,  however stating that the fifth pattern was selected does.
  710. Note:  Setting an attribute structure within an object structure to zero indicates that the attribute is not to be set. Setting an attribute structure within an Object structure to 'Random' indicates that a random Attribute structure should be generated.
  711. Example of a Object Structure with an Attribute flags set to 'Random', and 0 (Zero):
  712.     
  713. Using The Draw Libraries 
  714. In the previous section the requirements for setting up the various Draw Library structures were outlined. In the following section the details concerning actually using the Draw Libraries will be discussed. The Draw Libraries were designed to be as flexible as possible. They allow for several methods of automatically generating test cases, and a way that the script writer can specify tools and objects.
  715. Calling the Draw Libraries
  716. Along with the main routines that make up the Draw Libraries core functionality, several high level routines have been developed to assist the script writer in using the Draw Libraries. 
  717. nada        DoDraw( pTestMethod, pSpecifier, pNumTimes ) 
  718. DoDraw() is a highlevel task that calls the appropriate low-level tasks necessary to generate random objects based on the defined paletteStructs and toolStructs. If the global gDrawMethod is set it will override any parameter passed to DoDraw. All of our scripts call DoDraw() with no parameters so we can define which test method to use by setting the global gDrawMethod.
  719. Examples:
  720. • DoDraw(0);    # Does nothing - DoDraw is turned OFF         
  721. • DoDraw(1);     # Random objects for all tools defined in                   # global gToolList
  722.     
  723. • DoDraw(2);    # Generates one totally random object
  724. objectStruct    DrawObject(objectStruct, specifier )
  725. DrawObject() is the main routine in the Draw Libraries. It takes a complete ObjectStruct as a parameter and a specifier to indicate the window or rectangle to draw in.
  726. Example:
  727. • DrawObject({global SelectTool, {{25,15}}, {12,2                 ,'Pattern'}, 0, 'Random'},0);
  728. objectStruct    Draw( pTheTool, pThePointList, pThePattern, pTheLine,                 pTheColor, pSpecifier )
  729. Draw() takes six parameters, one for each element in an ObjectStruct and one to specify the window or rectangle to draw in. All of the parameters default to 'Random', which means that elements that are not specified will be generated randomly. Passing a 0 (Zero) for an element indicates that the attribute should not be set. The purpose of this task is to allow a script writer to pass in only the elements of an object that they want to specify. Draw will call DrawObject with a complete ObjectStruct (even though many of its elements may be equal to 'Random'). If a particular element is desired only that element needs to be passed in. 
  730. Examples:
  731.  • Draw(Global SelectTool, 'Random',0,0,{14,3, 'Color'},0);
  732. The SelectTool is specified so it will be used, a random Pointlist will be generated, no Pattern or Line will be set, and the 14th color will be selected (if the SelectTool allows for colors).
  733. • Draw(, , , ,{14,3, 'Color'});
  734. All elements in the above struct would be random except for the color attribute. 
  735. Note: If the random tool that is generated doesn't support the color attribute, this color struct will not be set.
  736. • Draw();
  737.     All elements in the above struct will be random. 
  738. objectStruct    GenerateObject( pTheObject )  
  739. GenerateObject() generates random objectStruct. It is possible to specify elements and have GenerateObject() generate random elements for those specified as 'Random'.
  740. Examples:
  741.  • MyObject := GenerateObject();
  742.     
  743. • MyObject := GenerateObject({Global SelectTool,'Random',0,'Random',0});
  744. patStruct    SetPattern( pThePattern, pSelectPattern, pObjectNumber ) 
  745. SetPattern() will set patterns based on the pThePattern parameter. If pThePattern = 'Random'  a PatStruct will be generated before the pattern is actually set. If the pSelectPattern parameter = 0 (Zero) then the pattern will not actually be selected, however a random PatStruct will be generated and returned. 
  746. Examples:
  747. • SetPattern('Random');     # Select random pattern (default)
  748.     
  749. • SetPattern();            # Same as above
  750. • SetPattern(0);            # Don't set any pattern ( no reason                     # to make call)
  751. • SetPattern({15,2, 'Pattern'}); # Passing an actual patStruct
  752. LineStruct    SetLine( pTheLine, pSelectLine, pObjectNumber ) 
  753. SetLine() will set line weights based on theLine parameter. If pTheLine = 'Random'  a LineStruct will be generated before the line is actually set. If the gSelectLine parameter = 0 (Zero) then the line will not actually be selected, however a random LineStruct will be generated and returned.  This routine is the default way of selecting line weights from palettes.  In order for this to work a line paletteStruct needs to exist within the gPaletteList.  The global variable kLinePaletteNum should then be set to the integer which represents the order in which the paletteStruct (for the line palette) exists within the gPaletteList.
  754. Examples:
  755. • SetLine('Random');     # Select random line weight (default)
  756. • SetLine();        # Same as above
  757. • SetLine(0);        # Don't set any line Weight ( no reason                   # to make call)
  758. • SetLine({12,3, 'Line'}); # Passing an actual LineStruct
  759. colorStruct    SetColor( pTheColor, pSelectColor, pObjectNumber ) 
  760. SetColor() will set colors based on its parameter, pTheColor.  If pTheColor = 'Random'  a colorStruct will be generated before the color is actually set. If the pSelectColor parameter = 0 (Zero) then the color will not actually be selected, however a random colorStruct will be generated and returned. This routine is the default way of selecting Colors from palettes. In order for this to work a color paletteStruct needs to exist within the gPaletteList. The global variable kColorPaletteNum should then be set to the integer which represents the order in which the paletteStruct (for the color  palette) exists within the gPaletteList.
  761. Examples:
  762. • SetColor('Random');     # Select random Color (default)
  763. • SetColor();        # Same as above
  764. • SetColor(0);        # Don't set any Color ( no reason to 
  765.                     # make call)
  766. • SetColor({15,4, 'Color'}); # Passing an actual colorStruct
  767. toolStruct    SetTool( pTool, pSelectTool, pObjectNumber ) 
  768. SetTool() will set tools based on theTool parameter. If pTool = 'Random'  a toolStruct will be generated before the tool is actually set. If the pSelectTool parameter = 0 (Zero) then the tool will not actually be selected, however a random toolStruct will be generated and returned. This routine is the default way of selecting Tools from palettes. In order for this to work a tool paletteStruct needs to exist within the gPaletteList. The global variable kColorPaletteNum should then be set to the integer which represents the order in which the paletteStruct (for the tool  palette) exists within the gPaletteList. The global variable gToolList should be set to all of the available tools.
  769. Examples:
  770. • SetTool('Random');     # Select random Tool (default)
  771. • SetTool();        # Same as above
  772. • SetTool(0);        # Don't set any Tool ( no reason to make                     # call)
  773. • SetTool({4,1, 'Circle'}); # Passing an actual toolStruct
  774. nada    PalettePicker( pElemStruct, pObjectNumber ) 
  775. PalettePicker() is a high level task that calls the appropriate tasks to actually select tools from various palettes. The parameter pElemStruct has three required elements  {ElemNum, PalNum, ElemName}.  If an elemStruct is passed in which contains more than these three elements, all others will be ignored. Normally, scriptors will not make calls directly to PalettePicker(). PalettePicker is called by all of the selection subroutines e.g. SetColor, SetPattern, SetLine, SetTool, DrawObject, etc. 
  776. Examples:
  777. • PalettePicker(global LineTool);    
  778. # Selects the LineTool (if defined) Same as  SetTool(global LineTool);
  779. • PalettePicker({2,1,”Select”});
  780. # Selects the second tool, from the 1st palette, named 'Select'. Assuming the 1st palette is set up correctly.
  781. Test Case Tracking
  782. Overview
  783. SPEC S&L contains a collection of several tasks which support defining and tracking test case execution. This section describes the routines which support defining and tracking test cases. 
  784. In order to track test cases (TCS) we had to define several terms. A TCS  is the smallest amount of functionality that a script writer may be interested in tracking. For example, A TCS could be defined as "Saving a Document". While there are many steps  you would have to go through to save a document, you may not be interested in tracking every menu selection or keystroke. 
  785. The term suite is used to specify all of the test cases that were executed at a given time. Therefore, each of the SPEC S&L Standard QuickLook scripts can be considered a suite. The test cases that are executed as part of a suite do not have to be directly related, for example the Standard QuickLooks execute numerous Standard File test cases and numerous window related test cases. These groups of test cases are not related except for the fact that the applications the scripts were written for support both types of functionality.
  786. How Test Case Tracking Works
  787. All scripts must explictly make a call to indicate that a Suite is being started, this is done with a call to SuiteStart (see below for details). By making this call SuiteStart will store a number of variables about the state of the target machine so that an individual test case can be reproduced if necessary. For example, all of the software configuarable variables (VM, FileShare settings, etc.) will be outputted (see below for more details).
  788. In order to track TCSs we have developed a mechanism by which you bracket your functionality tests with calls to TCSStart() and TCSEnd(). TCSStart() basically tells us what you are planning to do, and TCSEnd() tells us how successful your test was. It is important to understand that the script writer is responsible for determining how successfully the test completed. For more information about the different parameters used in TCSStart() and TCSEnd() see the headers inside the TCS.Lib. Appendix H contains a list of all the test cases in SPEC S&L.
  789. A typical TCSSTart() call contains the following parameters: 
  790. (pTCSID, pTextDesc)
  791.  
  792. pTCSID is a list formed with the following information:
  793.     - Test Case Number
  794.     - Test Case Set*
  795.     - Test Case Type *(defaults to Compatibility)
  796.     - Owner. *(defaults to SPECS&L)
  797. * If these defaults values do not meet your needs, you may pass your own values by reasigning the following constants in your script: kTCSetDefault, kTCTypeDefault, kTCOwnerDefault.
  798. A typical TCSEnd() call contains the following parameters:
  799. (pTCSID, pResultCode) There are several optional parameters available to provide additional imformation about the completion of the test case. See the header of TCSEnd() in the TCS.Lib.
  800. Sample code for TCS tracking
  801. Task TypeLetter()
  802. begin
  803.     # Push your TCS on our TCS Stack
  804.     TCSStart({1,"MySet", "MyType", "MyGroup"}, "TypeLetter",                 "TeachTeach");        
  805.         
  806.     # Do whatever actions that are a part of your  TCS
  807.     myReturnVal := LaunchTwitch("TeachText");
  808.     if(myReturnVal)
  809.         myReturnVal := EnterText();
  810.     
  811.     # Pop you TCS off and log it with the proper return value
  812.     TCSEnd({1,"MySet", "MyType", "MyGroup"}, myReturnVal);
  813. end;
  814. The TCS Stack
  815. A stack is used to handle TCS tracking. A balanced stack is critical to maintaining valid TCS results. In order to maintain a balanced stack it is important that every call to TCSStart() is offset with one, and only one call to TCSEnd(). So when writing new TCSs be especially careful that all of the branches within tasks will end up calling TCSEnd only once.
  816. Example of a task that creates  an unbalanced stack
  817. While the example below looks fairly similar to the first example there is an important difference. Upon entering the task a call to TCSStart() is made. If the call to LaunchTwitch() is successful a call to TCSEnd() is made. But if the call to LaunchTwitch is unsuccessful no call to TCSEnd() is made, this will create an unbalanced stack and possibly report false results.
  818. Task TypeLetter()
  819. begin
  820.     # Push your TCS on our TCS Stack
  821.     TCSStart({1,"MySet", "MyType", "MyGroup"}, "TypeLetter",                 "TeachTeach");        
  822.         
  823.     # Do whatever actions that are a part of your  TCS
  824.     myReturnVal := LaunchTwitch("TeachText");
  825.     if(myReturnVal)
  826.     begin
  827.         myReturnVal := EnterText();
  828.         # Pop you TCS off and log it with the proper return value
  829.         TCSEnd({1,"MySet", "MyType", "MyGroup"}, myReturnVal);
  830.     end;
  831. end;
  832. Calling The Test Case Tracking Tasks
  833. nada    SuiteStart( pScriptName, pScriptParamList, pScriptVersion ) 
  834. SuiteStart() is the first task that is called when running a script which contains test cases that need to be tracked. Calling this task will output many of the target's configuration variables.
  835. Examples:
  836. • SuiteStart("MyScript.vu");
  837. # Indicates that the suite "MyScript.vu" is starting, will save off many of the targets configuration variables.
  838. integer    SuiteEnd( pCompletionCode ) 
  839. When a suite that was started with SuiteStart() (see above) is completed a call to SuiteEnd() will output the amount ot time the suite took and the completion code for the script. There are four completion codes currently defined.
  840. Completion Codes
  841.      1 := Suite Complete successfully
  842.      0 := Suite failed to complete successfully.
  843.     -1 := Suite was not available to run.
  844.     -2 := Target was lost during execution (possible crash) (see global         gLaunchReqs for more details).
  845. Examples:
  846. • SuiteStart(0);     # Indicates that the suite failed to
  847.             # complete successfully.
  848. nada    TCSStart( pTCSID, pTextDesc, pAppName ) 
  849.  In order to track  specific test case using the SPEC S&L test case tracking mechanism, TCSStart should be called immediately prior to any actions that are a part of the functionality test. A unique TCS number must be assigned to each TCS that is being tracked, currently the SPEC team has a numbering scheme that can be made available upon request. The pTextDesc parameter is provided to make the output readable without requiring a database table to index the pTCSID. The pTextDesc should be set to a short string that describes the TCS. The pAppName should be passed in only if it is different than the global gAppTitle which is the default.
  850. Examples:
  851. • TCSStart({1,"MySet", "MyType", "MyGroup"}, "TypeLetter");
  852. # Indicates that the TypeLetter TCS is about to begin.
  853. nada    TCSEnd( pTCSID, pResultCode, pErrStr, pTCSVal, pTCSStr,             pResultStr ) 
  854.  All calls to TCSStart() (see above) must be balanced with one (and only one) call to TCSEnd(). This is where success/failure is assigned to the TCS. It is possible to pass in a reason for failing, by using the pErrStr parameter. The pTCSVal and pTCSStr parameters are currently reserved for internal use by SPEC S&L Drawing and Font tasks.
  855. Examples:
  856. • TCSEnd({1,"MySet", "MyType", "MyGroup"},1);     # Pass the top TCS on                                 # the stack.
  857. • TCSEnd({1,"MySet", "MyType", "MyGroup"},0, "There was no window to         close");
  858. # Fail the top TCS on the stack, because "There was no window to close".
  859. Appendix A - QuickLook Definition
  860. A QuickLook is a basic test of a third party application's compatibility with our system software. The following actions (not necessarily in the order tested) are standard in every QuickLook. For clarity, these actions are mapped to the high level Do tasks available in the SPEC S&L Libraries.
  861. Appendix B - Sample QuickLook
  862. # ****************************************************************************
  863. #
  864. #    File Name:        MacDrawPro.vu
  865. #
  866. #    Contains:    QuickLook test script for MacDraw Pro version 1.5
  867. #
  868. #    Written by:    Kevin Avoy, Ken Landreth, Michael Leong, Gil Spencer et al
  869. #
  870. #    Copyright:    © 1993 by Apple Computer, Inc., all rights reserved.
  871. #
  872. # ****************************************************************************
  873. #            C h a n g e        H i s t o r y (most recent first):
  874. # ****************************************************************************
  875. #
  876. #        Vers      Date    Author    Description
  877. #        ----    --------    ------    --------------------------------------------
  878. #        <1+>     5/25/93    Bob        Adding header to  old files
  879. #
  880. # ****************************************************************************
  881. #
  882. ########################################################################
  883. #                    External libraries 
  884. #=======================================================================
  885. Libraries "Output.Lib", "DoTasks.Lib","Draw.Lib","DA.Lib", "Font.Lib", "Globals.Lib", "LaunchQuit.Lib", "TCS.Lib";
  886. #########################################################################
  887. ########                   Application Specific Tasks
  888. #########################################################################
  889. #########################################################################
  890. #                    InitAppGlobals()
  891. #========================================================================
  892. # Author:        ML
  893. # Description:    Sets up tools and fonts for MacDraw Pro.  This task
  894. #                must be called first.
  895. # Parameters:    None
  896. # Returns:        Nothing
  897. # Examples:        InitAppGlobals()
  898. #========================================================================
  899. # History:
  900. #
  901. ########################################################################task InitAppGlobals()
  902. begin
  903.     
  904.     logstr("setting up {global gApptitle}'s globals");            
  905.     global kClick, kDrag, kMultiDrag, kMultiClickDrag, kMultiClick;
  906.     global kPalDocWind, kPalWind, kPullOffPal, kPopUpPal, kScrollPal;
  907.     global kToolPaletteNum := 1; 
  908.     global kColorPaletteNum := 2;
  909.     global kPatternPaletteNum := 3;
  910.     global kGradientPaletteNum := 4;
  911.     global gWindowInset := {27,41,20,20};    # Window inset
  912.     global gScreenInset := {0,20,0,0};        # Screen inset
  913.     global gVoidRect := {};                # Rect not to draw in - coordinates                                                 #  should be RelativeToWindow
  914.     global gLineWeights := {'1 point','2 point','6 point','8 point',
  915.                                     '10 point'};
  916.     global gTextStr;
  917.     
  918.     global gPaletteList :=    {
  919.         {                            #### Start Palette #1 - Tools
  920.         {0, 21, 25, 228,0},    # Location of palette relative to the window
  921.                                     # top is in first tool because it is larger
  922.         kPalDocWind,            # Palette type
  923.         {1,12},                    # Size of Tool matrix {numElemsWide,numElemsTall}
  924.         {0,17}                    # Offset between tools {h,v}
  925.         },                            #### End Palette #1
  926.         {                            #### Start Palette #2 - Colors
  927.         {152, 29, 148, 44,0},# PopPoint, TopLeft of first color 
  928.                                     #(if 4 item list - coords are absolute)
  929.                                     #  (if 5 item list - coords are relativeToWindow )
  930.         kPopUpPal,                # Palette type
  931.         {21,8},                    # Size of Tool matrix {numElemsWide,numElemsTall}
  932.         {10,10}                    # Offset between tools {h,v}
  933.         },                            #### End Palette #2
  934.         {                #            ### Start Palette #3 - Pattern
  935.         {175, 28, 176, 46,0},# PopPoint, TopLeft of first pattern                 kPopUpPal,                # Palette type
  936.         {8,8},                    # Size of Tool matrix {numElemsWide,numElemsTall}
  937.         {16,16}                    # Offset between tools {h,v}
  938.         },                            #### End Palette #3
  939.         {                            #### Start Palette #4 - Gradient
  940.         {200, 28, 198, 47,0},# PopPoint, TopLeft of first gradient                 kPopUpPal,                # Palette type
  941.         {8,2},                    # Size of Tool matrix {numElemsWide,numElemsTall}
  942.         {16,16}                    # Offset between tools {h,v}
  943.         }                            # End Palette #4
  944.     };
  945. ### MacDraw Pro tool Structures                    {Flag, Pattern, Line, Color}
  946. ### Palette Elements:=    Tool#,Pal#,ToolName, ToolType, DblClktoEnd,
  947.                                 SetAttributes
  948. global SelectTool    :=     { 1,  1, "Select",    kClick,     0,    {0}        };
  949. global CharTool     :=     { 2,  1, "Char",    kDrag,     0, {gTextStr,0,0,1}};
  950. global LineTool     :=     { 3,  1, "Line",    kDrag,     0,    {1,0,1,0}    };
  951. global RectTool     :=     { 4,  1,"Rectangle",    kDrag,    0,    {1,1,1,1}    };
  952. global RndRectTool:=     { 5,  1, "RndRect",    kDrag,    0,    {1,1,1,1}    };
  953. global OvalTool     :=     { 6,  1, "Oval",    kDrag,     0,    {1,1,1,1}    };
  954. global ArcTool     :=     { 7,  1, "Arc",    kDrag,     0,    {2,1,1,1}    };
  955. global FreeTool     :=     { 8,  1, "Freehand",    kMultiDrag,     0,    {2,1,1,1}};
  956. global PolyTool     :=     { 9,  1, "Polygon",    kMultiClick,    1,    {2,1,1,1}};
  957. global BezTool     :=     { 10, 1, "BezTool",    kMultiClick,    1,    {2,1,1,1}};
  958. global NoteTool     :=     { 11, 1, "Note",    kDrag,     0,    {gTextStr}    };
  959. global ColorPickerTool:={ 12, 1, "ColorPicker",    kClick,     0,    {0}};
  960. global PenLine     :=     { '', {87,29,1}, "PenLine",0,     0,    {0}};
  961. global ZoomOut     :=     { '', {30,-8,2}, "ZoomOut",0,    0,    {0}};
  962.     # global Tool list
  963.     global gToolList:={    SelectTool, 
  964.                         CharTool,
  965.                         LineTool,
  966.                         RectTool,
  967.                         RndRectTool,
  968.                         OvalTool,
  969.                         ArcTool,
  970.                         FreeTool,
  971.                         PolyTool,
  972.                         BezTool,
  973.                         NoteTool,
  974.                         ColorPickerTool
  975.                 };
  976.     ### font characteristic lists
  977.     global gFontSizeList := {'9','10','12','14','18', '24','36','48'};
  978.     global gFontStyleList := {'Bold','Italic','Outline', 'Underline','Shadow',
  979.                                         Superscript','Subscript','–Small Caps'};
  980.     ### Name of the Plain (style) menu item  ####
  981.     global gPlainStyle := "Plain Text";            # Plain-Style menu item
  982.     ## How to get to the next line
  983.     global gNextLineMethod := 1;            
  984.     ### 1 - ReturnKey,  2 - EnterKey, 3 - DownArrow Key, 4 - TabKey, {} -     Move/Click, {'Untitled'} - Move relative to the window titled 'Untitled'
  985.     /Click
  986.     
  987.     ### Does moving to the next line clear all font info
  988.     global gNextLineClearsFontSettings := 0;                        
  989. end;    #InitMacDrawProTools
  990. #########################################################################
  991. #                    MacDrawModifyDocument()
  992. #========================================================================
  993. # Author:            ML
  994. # Description:        Modify MacDraw Document
  995. # Parameters:        None
  996. # Returns:            Nothing
  997. # Examples:            MacDrawModifyDocument();
  998. # Assumptions:        None 
  999. # Applications:    MacDraw Pro
  1000. #========================================================================
  1001. # History:
  1002. #
  1003. #########################################################################
  1004. task MacDrawModifyDocument()
  1005. begin
  1006.     Scrapbook(global kScrapPict);
  1007. end;
  1008. #########################################################################
  1009. #                    MacDrawSetupDoText()
  1010. #========================================================================
  1011. # Author:        ML
  1012. # Description:    Sets up DoText
  1013. # Parameters:    None
  1014. # Returns:        Nothing
  1015. # Examples:        MacDrawSetupDoText();
  1016. # Assumptions:    None 
  1017. # Applications:    MacDraw Pro
  1018. #========================================================================
  1019. # History:
  1020. #
  1021. #########################################################################
  1022. task MacDrawSetupDoText()
  1023. begin
  1024.     logstr("Setting up for DoText...");
  1025.     SetTool(global SelectTool);        # Deselects any selected objects 
  1026. end;
  1027. ##########################################################################
  1028. ####################         Main script                ####################
  1029. ##########################################################################
  1030. script MacDrawPro (ScriptLevel:= -1)
  1031. begin
  1032.     InitGlobals(ScriptLevel);            # initialize your general globals
  1033.     InitDraw();
  1034.     InitFonts();
  1035.     global gApptitle := "MacDraw Pro";
  1036.     global gAppVersion := '1.5';        # version of app you will be running
  1037.     SuiteStart('MacDrawPro.vu');        # begin a new test suite
  1038.     ## launch or twitch to your app
  1039.     if LaunchTwitch("{gAppTitle}",gAliasDirectory) 
  1040.     begin
  1041.         global gFileName := "@!@-{gBuildVers}-{gAppTitle}";    
  1042.         global gModifyDocument:= task MacDrawModifyDocument; 
  1043.         global gSetLine := Task SetLineMenuItems;        # Requires VU 2.0
  1044.         ## define app specific task
  1045.         global gSetupDoText:= task MacDrawSetupDoText;    
  1046.         InitAppGlobals();                # init app specific globals
  1047.         DoSetUpApp(,,,,1,1,1);
  1048.         DoDraw();
  1049.         DoText();
  1050.         DoWindow();
  1051.         DoCloseApp(1);
  1052.     end; # if LaunchTwitch("{gAppTitle}",gAliasDirectory)
  1053.     SuiteEnd();
  1054. end; # script MacDrawPro
  1055. Appendix C - Sample Scripts
  1056. The following scripts are distributed as part of the SPEC S&L package for sample purposes only:
  1057. • 4D.vu
  1058. • Canvas.vu
  1059. • ClarisCad.vu
  1060. • Director.vu
  1061. • Excel4.vu
  1062. • FileMakerPro.vu
  1063. • Freehand.vu
  1064. • Hypercard.vu
  1065. • Illustrator.vu
  1066. • MacDrawPro.vu
  1067. • MacWrite.vu
  1068. • Mathematica.vu
  1069. • MORE.vu
  1070. • MSWorks.vu
  1071. • PageMaker.vu
  1072. • Persuasion.vu
  1073. • PhotoShop.vu
  1074. • PixelPaintPro.vu
  1075. • PowerPoint.vu
  1076. • QuarkXpress.vu
  1077. • Quicken.vu
  1078. • Studio32.vu
  1079. • ThinkC.vu
  1080. • Word.vu
  1081. • Word5.vu
  1082. • WordPerfect.vu
  1083. • ConfigSys.vu (used in combination with MPW)
  1084. Appendix D - Library Dependancies
  1085. Library    Dependancies    
  1086.  
  1087. Custom.Lib    none
  1088.     
  1089. DA.Lib    Output.Lib, TCS.Lib, LaunchQuit.Lib, TargetCheck.Lib, UserInterface.Lib.
  1090.     
  1091. DoTasks.Lib    OutPut.Lib, Font.Lib, StandardFile.Lib, TCS.Lib, Draw.Lib, Print.Lib, LaunchQuit.Lib, Misc.Lib, TargetCheck.Lib, DA.Lib, UserInterface.Lib.
  1092.     
  1093. Draw.Lib     Palette.Lib, String.Lib, OutPut.Lib, TCS.Lib, Geometry.Lib, UserInterface.Lib.
  1094.     
  1095. FileTool.Lib    none
  1096.     
  1097. Finder.Lib    Output.Lib, LaunchQuit.Lib, StandardFile.Lib, UserInterface.Lib.
  1098.     
  1099. Font.Lib    TCS.Lib, UserInterface.Lib, OutPut.Lib.
  1100.     
  1101. Geometry.Lib    none
  1102.     
  1103. Gestalt.Lib    OnTarget.Lib, MathTool.vulib
  1104.     
  1105. Globals.Lib    Custom.Lib.
  1106.     
  1107. LaunchQuit.Lib    TCS.Lib , Output.Lib, String.Lib, Gestalt.Lib, StandardFile.Lib, OnTarget.Lib, TargetCheck.Lib, UserInterface.Lib.
  1108.     
  1109. Misc.Lib    OutPut.Lib, LaunchQuit.Lib, TCS.Lib, UserInterface.Lib.
  1110.     
  1111. OnTarget.Lib    none
  1112.     
  1113. OutPut.Lib    none
  1114.     
  1115. Palette.Lib     TCS.Lib, Output.Lib, UserInterface.Lib.
  1116.     
  1117. Print.Lib    Output.Lib, TCS.Lib, UserInterface.Lib.
  1118.     
  1119. Select.Lib    UserInterface.Lib.
  1120.     
  1121. StandardFile.Lib    String.Lib, TCS.Lib, Output.Lib, UserInterface.Lib.
  1122.     
  1123. String.Lib    none
  1124.     
  1125. TargetCheck.Lib    Output.Lib
  1126.     
  1127.         
  1128. Library    Dependancies    
  1129.  
  1130. TCS.Lib    Utility.Lib, Gestalt.Lib, UserInterface.Lib, FileTool.Lib, String.Lib, OutPut.Lib.
  1131.     
  1132. Text.Lib    Font.Lib, String.Lib.
  1133.     
  1134. UserInterface.Lib    Geometry.Lib, String.Lib, Output.Lib, TCS.Lib, StandardFile.Lib.
  1135.     
  1136. Utility.Lib    none
  1137.     
  1138. WordProcessor.Lib     DoTasks.Lib, UserInterface.Lib.
  1139.     
  1140.  
  1141. Appendix E - Tasks within Libraries
  1142. Custom.Lib
  1143. TASK InitCustom() 
  1144. DA.Lib
  1145. TASK Scrapbook(requestElement, ccpFlag, pasteFlag) 
  1146. DoTasks.Lib
  1147. TASK DoDraw(pTestMethod, pSpecifier, pNumTimes)
  1148. TASK DoWindow(pTestMethod, pSpecifier, pRestoreWindow, pNumTimes)
  1149. TASK DoText(pTestMethod, pNumTimes)
  1150. TASK DoFiles(pTestMethod, pFileName, pSaveAsFlag, pSelectOpen, pRevertMI)
  1151. TASK DoSetUpApp(pDismissOpeningDialog, pDefaultWindowSpec, pNewDocPath,                 pDismissNewDocDialog, pScrapText, pScrapPict,  pSaveDoc,pOpenDoc)
  1152. TASK DoCloseApp(pSaveRevert, pDismissAboutBox, pPageSetup, pPrinter, pQuit)
  1153. Draw.Lib
  1154. TASK InitDraw()
  1155. TASK CheckObjectStruct(pObjectStruct)
  1156. TASK DrawObject(pObjectStruct, pSpecifier)
  1157. TASK SetAttributes(pObjectStruct, pDrawObject)
  1158. TASK UseClickTool()
  1159. TASK UseDragTool(pPoint, pSpecifier, pMouseDown, pDClickToEnd) 
  1160. TASK UseDragClickTool(pPointList, pSpecifier, pMouseDown, pDClickToEnd)
  1161. TASK UseMultiDragTool(pPointList, pSpecifier, pDClickToEnd) 
  1162. TASK UseMultiClickTool(pPointList, pSpecifier, pDClickToEnd) 
  1163. TASK UseMultiClickDragTool(pPointList, pSpecifier, pDClickToEnd) 
  1164. TASK MakePointList(pInset) 
  1165. TASK SetTool(pTool, pSelectTool, pObjectNumber)
  1166. TASK GenerateObject(pTheObject) 
  1167. TASK SetPointList(pTheObject, pSpecifier)
  1168. TASK Draw(pTheTool, pThePointList, pThePattern, pTheLine, pTheColor, pSpecifier)
  1169. TASK SetColor(pTheColor, pSelectColor, pObjectNumber)    
  1170. TASK SetLine(pTheLine, pSelectLine, pObjectNumber) 
  1171. TASK SetLineMenuItems(pTheLine, pSelectLine, pObjectNumber) 
  1172. TASK SetPattern(pThePattern, pSelectPattern, pObjectNumber)    
  1173. TASK CheckSetup()
  1174. FileTool.Lib
  1175. TASK InitFileTool(pOnTheTarget)
  1176. Finder.Lib
  1177. TASK HelpBalloons(n)
  1178. TASK FinderNavigate(PathList, OpenFlag)
  1179. TASK ShimmerMateCopy(Source) 
  1180. Font.Lib
  1181. TASK InitFonts()
  1182. TASK SetFont(pMyFont, pObjectNumber) 
  1183. TASK SetStyle(pMyStyle, pObjectNumber) 
  1184. TASK SetSize(pMySize, pObjectNumber) 
  1185. TASK NextLine()
  1186. TASK RandomFontRecords(pCurrentFontRecord)
  1187. TASK WaterFallFontTest() 
  1188. TASK QuickLookTextTest() 
  1189. TASK SetFontParams(pFontRecord, pResetPlainFlag, pObjectNumber)
  1190. TASK ReportSelectedMenuItems(pMenuList, pObjectNumber) 
  1191. Geometry.Lib
  1192. TASK CenterPointOfRect()
  1193. TASK PtInRect(thePoint, theRect)
  1194. TASK RndPtInWindow(specifier)
  1195. TASK RndPtInRect(theRect)
  1196. TASK RectInRect(rect1, rect2)
  1197. TASK GetXYRandom(inset, numPts) 
  1198. Gestalt.Lib
  1199. TASK CheckVM()
  1200. TASK CheckCache()
  1201. TASK FileShare()
  1202. TASK FormLongNumber()
  1203. TASK GestaltFPUType()
  1204. TASK GestaltIsPowerPC()
  1205. TASK GestaltMachineType()
  1206. TASK GestaltProcessorType()
  1207. TASK GestaltMMUType()
  1208. TASK GestaltLogicalRAMSize()
  1209. TASK GestaltPhysicalRAMSize()
  1210. TASK GestaltSystemArchitecture()
  1211. TASK MachineState(printMachineState)
  1212. TASK OnTargetInit()
  1213. Globals.Lib
  1214. TASK InitGlobals(pTheScriptParam) 
  1215. TASK InitRandomSeed()
  1216. TASK PrintGlobals()
  1217. TASK SetTestLevel(pTestLevel, pCustomSetting)
  1218. LaunchQuit.Lib
  1219. TASK Twitcher(appName) 
  1220. TASK MiniLaunch(appTitle, LaunchApp, SetDir)
  1221. TASK PatchLaunchTwitcher(AppName, AliasDir, LaunchApp) 
  1222. TASK Quit(OverWrite, DocName, HowQuit, CloseScrapbook, CloseFinderWindows)
  1223. TASK QuitBackgroundApps() 
  1224. TASK TwitchQuit() 
  1225. TASK LaunchAssist() 
  1226. TASK LaunchByAppleMenu(ItemName) 
  1227. TASK LaunchByTypeSelect(AppName, AliasDir) 
  1228. TASK LaunchFillMemApp() 
  1229. TASK LaunchTwitch(AppName, AliasDir, LaunchApp, SuiteBailOut)
  1230. TASK PreFlight(myList)
  1231. MathTool.vulib
  1232. (none)
  1233. Misc.Lib
  1234. TASK CenterofRectClick()
  1235. TASK DoSpecialTest(WhichTest) 
  1236. TASK AboutBox(DismissAboutBox)
  1237. OnTarget.Lib
  1238. (none)
  1239. OutPut.Lib
  1240. TASK LogStr(str, LogPriority) 
  1241. Palette.Lib
  1242. TASK PalettePicker(elemStruct, ObjectNumber)
  1243. TASK SelFromDocWind(elemStruct)
  1244. TASK SelFromPalWind(elemStruct)
  1245. TASK SelFromPullOff(elemStruct)
  1246. TASK SelFromCoord(elemStruct, ObjectNumber)
  1247. TASK SelFromPopUp(elemStruct)
  1248. TASK SelFromScroll(elemStruct)
  1249. TASK GetRandomElement(palStruct)
  1250. Print.Lib
  1251. TASK TestPageSetup(checkBoxTest, paperSizeTest, pageSizeTest, orientationTest, printTest)
  1252. TASK TestCheckBoxList(checkBoxList)
  1253. TASK PaperSize()
  1254. TASK PageSize()
  1255. TASK ToggleOrientation()
  1256. TASK PrintSample()
  1257. TASK PrintAlert()
  1258. TASK PageSetup(WhichDevice, PagSetupMI) 
  1259. TASK Printer(PrintMI) 
  1260. Select.Lib
  1261. TASK SelectIt(ProcID, PtorRect)
  1262. TASK PointSelect (Pt, RelToWindow)
  1263. TASK RectSelect (Rect, RelToWindow)
  1264. TASK HereToStartSelect()
  1265. TASK HereToEndSelect()
  1266. TASK SelectAll()
  1267. StandardFile.Lib
  1268. TASK SaveAs(pNameDoc, pReplaceFlag, pSelectSaveAs, pPathlist) 
  1269. TASK OpenFile(pNameDoc, pSelectOpen, pPathList, pPartialPath) 
  1270. TASK SFNavigate(pPathList, pTEToggle, pFinalReturn, pPartialPath) 
  1271. TASK SFType(pPathList, pTEToggle, pFinalReturn, pPartialPath)
  1272. TASK ReplaceExist(pReplaceFlag, pNameDoc) 
  1273. TASK GetNewFileName(pFileName, pIncludeNameFlag)
  1274. TASK SFSelectPopupMenuItem(pPopupMenuItem)
  1275. TASK ModifyDocument()
  1276. TASK Revert(pRevertMI)
  1277. TASK IsStandardFile(pLogIt)
  1278. TASK CancelStandardFile(pHowCancel, pSaveAsMenu)
  1279. TASK Save(pSaveMethod)
  1280. String.Lib
  1281. TASK IsSubString(str1, str2)
  1282. TASK PointListToStr(pointList)
  1283. TASK FindPos(char, str, startPos)
  1284. TASK Substring(String, StartChar, NumChar)
  1285. TASK RandomString(NumChar) 
  1286. TASK FormPositiveInteger(str, start_index, end_index)
  1287. TASK CharToDigit(character)
  1288. TASK StripCarriageReturn(pLine)
  1289. TASK StringUntilChar(pTheString, pTheChar, pIncludeTheChar, pNumOccurences)
  1290. TASK NumTimesCharInString(pTheString, pTheChar)
  1291. TASK StringAfterChar(pTheString, pTheChar, pIncludeTheChar, pNumOccurences)
  1292. TargetCheck.Lib
  1293. TASK Restart()
  1294. TASK MatchApplication(logMe, UpdateAppTitle) 
  1295. TCS.Lib
  1296. TASK InitTCSLogging(pSetupFileToolOutput)
  1297. TASK TCSStart(pTCSID, pTextDesc, pAppName)
  1298. TASK TCSEnd(pTCSID, pResultCode, pErrStr, pTCSVal, pTCSStr, pResultStr, pDumpStack)
  1299. TASK SuiteStart(pScriptName, pScriptParamList, pScriptVersion)
  1300. TASK SuiteEnd(pCompletionCode)
  1301. Text.Lib
  1302. TASK TypeWord(pNumChars)
  1303. TASK TypeSentence(pNumWords) 
  1304. TASK TypeParagraph(pNumSentences)
  1305. UserInterface.Lib
  1306. TASK SelectMenuItem(pMenu1, pMenu2, pMenu3) 
  1307. TASK FindMenu(pTheMenuItem)
  1308. TASK KeyEq(pKeyEquiv, pOtherkey, pNumTimes) 
  1309. TASK TestWindow(pSpecifier, pFunctionList, pRestoreWindow, pNumTimes, pDragXY) 
  1310. TASK WindowFunction(pSpecifier, pTheFunction, pDragXY, pDestinationPoint) 
  1311. TASK DragAcrossScreens(pSpecifier, pDragXY) 
  1312. TASK SizeAcrossScreens(pSpecifier, pDragXY) 
  1313. TASK AdjustRectToScreen(pTheRect) 
  1314. TASK CoverCompletely (pFirstWindow, pSecondWindow)
  1315. TASK ResetWindow(pTheWindow) 
  1316. TASK SelectWindow(pSpecifier) 
  1317. TASK UnCoverWindow(pSpecifier, pFrontWindow)
  1318. TASK DragWindow(pHorizontalPixels, pVerticalPixels, pSpecifier, pAbsolutely) 
  1319. TASK SizeWindow(pPixelsWide, pPixelsHigh, pSpecifier, pAbsolutely) 
  1320. TASK ZoomWindow(pSpecifier) 
  1321. TASK CloseWindow(pHowClose, pOverWrite, pSpecifier, pNewDocName) 
  1322. TASK ScrollWindow(pWhichScrollBar, pDesirePosition, pMaxPosition) 
  1323. TASK GetVHScrollBars()
  1324. TASK CloseAllWindows()
  1325. TASK FindWindow(pSpecifier) 
  1326. TASK GetRandomPointsRelativeToWindow(pInset, pSpecifier, pNumPts)
  1327. TASK SelectButton(pButtonName) 
  1328. TASK SelectRadioButton(pRadioButtonName) 
  1329. TASK SelectCheckBox(pCheckBoxName) 
  1330. TASK CheckYesNo(pFlag)
  1331. TASK DialogCheck(pFindStaticText, pCommitButton, pLogIT, pWindowDesc) 
  1332. TASK DialogHandler(pSpecifier)
  1333. TASK DismissDialog (pHowToDismiss, pSpecifier)
  1334. TASK MoveRelativeToWindow(pHorizontalPixels, pVerticalPixels, pSpecifier, pMouseDown,     pInset, WhichCorner)
  1335. TASK MoveMouse(pHorizontalPixels, pVerticalPixels, pAbsolutely, pMouseDown)
  1336. TASK TypeStr(pTheString) 
  1337. TASK TypeList(pStringList, pSpecialKey, pTypeFinalKey) 
  1338. TASK SpecialKey(pTheKey, pKeyName, pNumTimes) 
  1339. Utility.Lib
  1340. TASK Timer(timeParam) 
  1341. TASK BeginTimer() 
  1342. TASK EndTimer() 
  1343. TASK GetCurrentTime(NeedMeridian, returnDate)
  1344. WordProcessor.Lib
  1345. TASK DoWPTools()
  1346. Appendix F - Task Listing Sorted Alphabetically
  1347. Task Names    Library Names
  1348. AboutBox    Misc.Lib
  1349. AdjustRectToScreen    UserInterface.Lib
  1350. BeginTimer    Utility.Lib
  1351. CancelStandardFile    StandardFile.Lib
  1352. CenterofRectClick    Misc.Lib
  1353. CenterPointOfRect    Geometry.Lib
  1354. CharToDigit    String.Lib
  1355. CheckCache    Gestalt.Lib
  1356. CheckObjectStruct    Draw.Lib
  1357. CheckSetup    Draw.Lib
  1358. CheckVM    Gestalt.Lib
  1359. CheckYesNo    UserInterface.Lib
  1360. CloseAllWindows    UserInterface.Lib
  1361. CloseWindow    UserInterface.Lib
  1362. CoverCompletely    UserInterface.Lib
  1363. DialogCheck    UserInterface.Lib
  1364. DialogHandler    UserInterface.Lib
  1365. DismissDialog    UserInterface.Lib
  1366. DoCloseApp    DoTasks.Lib
  1367. DoDraw    DoTasks.Lib
  1368. DoFiles    DoTasks.Lib
  1369. DoSetUpApp    DoTasks.Lib
  1370. DoSpecialTest    Misc.Lib
  1371. DoText    DoTasks.Lib
  1372. DoWPTools    WordProcessor.Lib
  1373. DoWindow    DoTasks.Lib
  1374. DragAcrossScreens    UserInterface.Lib
  1375. DragWindow    UserInterface.Lib
  1376. Draw    Draw.Lib
  1377. DrawObject    Draw.Lib
  1378. FileShare    Gestalt.Lib
  1379. Task Names    Library Names
  1380. FindMenu    UserInterface.Lib
  1381. FindPos    String.Lib
  1382. FindWindow    UserInterface.Lib
  1383. FinderNavigate    Finder.Lib
  1384. FormPositiveInteger    String.Lib
  1385. GenerateObject    Draw.Lib
  1386. GestaltFPUType    Gestalt.Lib
  1387. GestaltLogicalRAMSize    Gestalt.Lib
  1388. GestaltMMUType    Gestalt.Lib
  1389. GestaltMachineType    Gestalt.Lib
  1390. GestaltPhysicalRAMSize    Gestalt.Lib
  1391. GestaltProcessorType    Gestalt.Lib
  1392. GetCurrentTime    Utility.Lib
  1393. GetNewFileName    StandardFile.Lib
  1394. GetRandomElement    Palette.Lib
  1395. GetRandomPointsRelativeToWindow    UserInterface.Lib
  1396. GetVHScrollBars    UserInterface.Lib
  1397. GetXYRandom    Geometry.lib
  1398. HelpBalloons    Finder.Lib
  1399. HereToEndSelect    Select.Lib
  1400. HereToStartSelect    Select.Lib
  1401. InitCustom    Custom.Lib
  1402. InitDraw    Draw.Lib
  1403. InitFileTool    FileTool.Lib
  1404. InitFonts    Font.Lib
  1405. InitGlobals    Globals.Lib
  1406. InitRandomSeed    Globals.Lib
  1407. InitTCSLogging    TCS.Lib
  1408. IsStandardFile    StandardFile.Lib
  1409. IsSubString    String.Lib
  1410. KeyEq    UserInterface.Lib
  1411. EndTimer    Utility.Lib
  1412. LaunchByAppleMenu    LaunchQuit.Lib
  1413. LaunchByTypeSelect    LaunchQuit.Lib
  1414. Task Names    Library Names
  1415. LaunchAssist    LaunchQuit.Lib
  1416. LaunchFillMemApp    LaunchQuit.Lib
  1417. LaunchTwitch    LaunchQuit.Lib
  1418. LogStr    OutPut.Lib
  1419. MachineState    Gestalt.Lib
  1420. MakePointList    Draw.Lib
  1421. MatchApplication    TargetCheck.Lib
  1422. MiniLaunch    LaunchQuit.Lib
  1423. ModifyDocument    StandardFile.Lib
  1424. MoveMouse    UserInterface.Lib
  1425. MoveRelativeToWindow    UserInterface.Lib
  1426. NextLine    Font.Lib
  1427. NumTimesCharInString    String.Lib
  1428. OnTargetInit    Gestalt.Lib
  1429. OpenFile    StandardFile.Lib
  1430. PageSetup    Print.Lib
  1431. PageSize    Print.Lib
  1432. PalettePicker    Palette.Lib
  1433. PaperSize    Print.Lib
  1434. PatchLaunchTwitcher    LaunchQuit.Lib
  1435. PointListToStr    String.Lib
  1436. PointSelect    Select.Lib
  1437. PreFlight    LaunchQuit.Lib
  1438. PrintAlert    Print.Lib
  1439. PrintGlobals    Globals.Lib
  1440. PrintSample    Print.Lib
  1441. Printer    Print.Lib
  1442. PtInRect    Geometry.lib
  1443. QuickLookTextTest    Font.Lib
  1444. Quit    LaunchQuit.Lib
  1445. QuitBackgroundApps    LaunchQuit.Lib
  1446. RandomString    String.Lib
  1447. RectInRect    Geometry.lib
  1448. RectSelect    Select.Lib
  1449. Task Names    Library Names
  1450. RandomFontRecords    Font.Lib
  1451. ReplaceExist    StandardFile.Lib
  1452. ReportSelectedMenuItems    Font.Lib
  1453. ResetWindow    UserInterface.Lib
  1454. Restart    TargetCheck.Lib
  1455. Revert    StandardFile.Lib
  1456. RndPtInRect    Geometry.lib
  1457. RndPtInWindow    Geometry.lib
  1458. SFNavigate    StandardFile.Lib
  1459. SFSelectPopupMenuItem    StandardFile.Lib
  1460. SFType    StandardFile.Lib
  1461. Save    StandardFile.Lib
  1462. SaveAs    StandardFile.Lib
  1463. Scrapbook    DA.Lib
  1464. ScrollWindow    UserInterface.Lib
  1465. SelFromCoord    Palette.Lib
  1466. SelFromDocWind    Palette.Lib
  1467. SelFromPalWind    Palette.Lib
  1468. SelFromPopUp    Palette.Lib
  1469. SelFromPullOff    Palette.Lib
  1470. SelFromScroll    Palette.Lib
  1471. SelectAll    Select.Lib
  1472. SelectButton    UserInterface.Lib
  1473. SelectCheckBox    UserInterface.Lib
  1474. SelectIt    Select.Lib
  1475. SelectMenuItem    UserInterface.Lib
  1476. SelectRadioButton    UserInterface.Lib
  1477. SelectWindow    UserInterface.Lib
  1478. SetAttributes    Draw.Lib
  1479. SetColor    Draw.Lib
  1480. SetLine    Draw.Lib
  1481. SetLineMenuItems    Draw.Lib
  1482. SetPattern    Draw.Lib
  1483. SetFont    Font.Lib
  1484. Task Names    Library Names
  1485. SetFontParams    Font.Lib
  1486. SetPointList    Draw.Lib
  1487. SetSize    Font.Lib
  1488. SetStyle    Font.Lib
  1489. SetTestLevel    Globals.Lib
  1490. SetTool    Draw.Lib
  1491. ShimmerMateCopy    Finder.Lib
  1492. SizeAcrossScreens    UserInterface.Lib
  1493. SizeWindow    UserInterface.Lib
  1494. SpecialKey    UserInterface.Lib
  1495. StringAfterChar    String.Lib
  1496. StringUntilChar    String.Lib
  1497. StripCarriageReturn    String.Lib
  1498. Substring    String.Lib
  1499. SuiteEnd    TCS.Lib
  1500. SuiteStart    TCS.Lib
  1501. TCSEnd    TCS.Lib
  1502. TCSStart    TCS.Lib
  1503. TestCheckBoxList    Print.Lib
  1504. TestPageSetup    Print.Lib
  1505. TestWindow    UserInterface.Lib
  1506. Timer    Utility.Lib
  1507. ToggleOrientation    Print.Lib
  1508. TwitchQuit    LaunchQuit.Lib
  1509. Twitcher    LaunchQuit.Lib
  1510. TypeList    UserInterface.Lib
  1511. TypeParagraph    Text.Lib
  1512. TypeSentence    Text.Lib
  1513. TypeStr    UserInterface.Lib
  1514. TypeWord    Text.Lib
  1515. UnCoverWindow    UserInterface.Lib
  1516. UseClickTool    Draw.Lib
  1517. UseDragClickTool    Draw.Lib
  1518. UseDragTool    Draw.Lib
  1519. Task Names    Library Names
  1520. UseMultiClickDragTool    Draw.Lib
  1521. UseMultiClickTool    Draw.Lib
  1522. UseMultiDragTool    Draw.Lib
  1523. WaterFallFontTest    Font.Lib
  1524. WindowFunction    UserInterface.Lib
  1525. ZoomWindow    UserInterface.Lib
  1526. Appendix G - Global Variables & Constants
  1527. The following section describes the global variables that are used within SPEC S&L. It is important to understand that the majority of global variables used are actually constants. It is appropriate to set certain global variables prior to execution, however they will stay constant during runtime. 
  1528.  The reason that we use 'constants' instead of passing parmeters is that a great deal of the information contained within our data structure to 'model' the application is constant and used by many of the routines within the libraries, therefore passing this information by way of parameter would be redundant. 
  1529. Each of the following sections describe global variables that affect various areas of functionality. The tasks containing the global variables are InitGlobals, InitDraw, InitFonts and InitRandomSeed. The section header will indicate the name of the task which initializes the global variables, and the library in which the global variables should be set and/or initialized. The actual global variable name will appear in bold, followed by a description of the functionality the global variable provides, possible values, whether or not it can be modified, the tasks that use the global variable, and the tasks that modify them. If there are no task names in the 'Modified by' field, you can assume that no library routines modify the global variable.
  1530.     
  1531. Initialized In The Initglobals Task
  1532. Task name    - InitGlobals()
  1533. Location    - Globals.Lib
  1534. Initialize    - Must be initialized from within scripts prior to making any calls.
  1535. Miscellaneous
  1536. gAliasDirectory        
  1537. Description :
  1538.     Launching applications requires knowing where the application resides. SPEC S&L utilizes aliases to short cut this requirement. An alias is created for all of the applications that will have scripts executed against them. These aliases are palced in a directory, which in turn has an alias made for it. This alias is placed in the Apple Menu Items folder. 
  1539. Possible values: 
  1540.     String 
  1541. Can be Modified:   Yes
  1542. Used by : Scripts use this directly to pass as a parameter to LaunchTwitch() when launching applications.
  1543.         Modified by :  Scripts
  1544.     gAppTitle
  1545.     Description:
  1546. This contains the name of the current application and should be explicitly defined by script upon launching applications to insure that the correct application is running. This is a part of the SPEC S&L application verification scheme(see task ApplicationVerification() for more details).
  1547.     Possible values:
  1548. String
  1549. Can be Modified: Yes 
  1550. Used by : Scrapbook(), DoWindow(), DoSetUpApp(), DoCloseApp(), 
  1551.   Twitcher(), Quit(), Revert(), TCSStart(), SuiteStart(), 
  1552.   ApplicationVerification(), Scripts.
  1553. Modified by :  MatchApplication() (Note: Both LaunchTwitch(), Quit() 
  1554.           modify it indirectly by way of a call to MatchApplication()).
  1555. gAppVerify
  1556.     Description:
  1557. SPEC S&L has a background task which verifies that the application that is currently active is the intended application. The gAppVerify turns this verification scheme OFF(0) or ON(1).
  1558.     Possible values:
  1559. Integer - Boolean ( 0 or 1 )
  1560.     Can be Modified: Yes
  1561.     Used by : LogStr()
  1562. Modified by: LaunchTwitch(), Quit(), and Scripts prior to or during runtime.
  1563.     gBuildVers 
  1564.     Description:
  1565.     This is contains the version of system software on the target machine.
  1566.     Possible values:
  1567. String 
  1568.     Can be Modified: No
  1569. Used by : Scripts - to include the current version of the Operating 
  1570.   System in filenames generated during test runs.
  1571.     Modified by : none
  1572. gCustomNewDocDialog
  1573. Description :
  1574.    Define this as a window descriptor if you want to override the default window descriptor ([window o:1 s:dialog]) for dismissing any dialogs that appear right after selecting the New menu item from the File menu.. Used in DoSetUpApp().
  1575. Possible values: 
  1576.     Window descriptors
  1577. Can be Modified:   Yes
  1578. Used by :  DoSetUpApp()
  1579. Modified by : Scripts
  1580. gCustomOpeningDialog
  1581. Description :
  1582.    Define this as a window descriptor if you want to override the default window descriptor ([window o:1 s:dialog]) for dismissing any dialogs that appear right after launching. Used in DoSetUpApp().
  1583. Possible values: 
  1584.     Window descriptors
  1585. Can be Modified:   Yes
  1586. Used by :  DoText()
  1587. Modified by : Scripts
  1588. gCustomRetrievedDoc 
  1589. Description :
  1590.    Define this as a window descriptor if you want to override the default window descriptor ([window g:true z:true t:?DocName]!) used in OpenFile ().
  1591. Possible values: 
  1592.     Window descriptors
  1593. Can be Modified:   Yes
  1594. Used by :  Scripts
  1595. Modified by : none
  1596.     gDBLogging
  1597.     Description:
  1598. Indicates whether or not to output database records
  1599.     Possible values:
  1600.     Boolean ( 0 or 1 )
  1601. Can be Modified:   Yes
  1602. Used by : TCSStart(), TCSEnd(), SuiteStart(), SuiteEnd().
  1603. Modified by :  Scripts - To suppress database output.
  1604.     gDebugFlag
  1605.     Description:
  1606. Indicates whether or not debugging values within the libraries will be printed.
  1607.     Possible values:
  1608.     Integer - Boolean ( 0 or 1 )
  1609. Can be Modified:   Yes
  1610. Used by : DoDraw(), TCSEnd(), and the majorityof tasks within 
  1611.   Draw.Lib and Palette.Lib.
  1612. Modified by :  Scripts - normally only when debugging.
  1613.     gDisableAllLogging
  1614.     Description:
  1615. This is used to suppress any logging from LogStr(). This can be reset at any point in a script where logging is undesireable.
  1616.     Possible values:
  1617.     Integer - Boolean ( 0 or 1 )
  1618. Can be Modified: Yes
  1619. Used by : LogStr(),
  1620. Modified by :  DrawObject(), SelFromDocWind(), SelFromPalWind(), 
  1621.   SelFromCoord(), SelFromPopUp(), PageSize(), ToggleOrientation(), SFSelectPopupMenuItem(). (Note: All Library routines that modify this return it to its previous state prior to completion)
  1622. gIsSystem7
  1623.     Description:
  1624. Indicates whether the current Operating System is System 7.0 or greater.
  1625.     Possible values:
  1626.     Integer - Boolean ( 0 or 1 )
  1627.     Can be Modified: No
  1628.     Used by : Twitcher(), Quit(), TwitchQuit(), LaunchTwitch(), OpenFile(),
  1629.        ReplaceExist().
  1630.     Modified by : none
  1631.     gLastSavedFile
  1632.     Description:
  1633. This contains the name of the last file that was saved by the task SaveAs().
  1634. Possible values:
  1635. String
  1636. Can be Modified:  Only by SaveAs().
  1637. Used by :DoFiles(),CloseWindow(), Scripts.
  1638.     Modified by : SaveAs().
  1639. gLogLevel     
  1640.     Description:
  1641. The output from many of the SPEC S&L routines are funneled thru a single task LogStr(). The gLogLevel is used to specify what type of output LogStr() should print. (see LogStr for more details) 
  1642.     Possible values:
  1643. Integer value between 0 and 5 
  1644.     Can be Modified: Yes
  1645.     Used by : LogStr() in 'Output.Lib'.
  1646.     Modified by : Scripts prior to or during runtime.
  1647. gLogStrCount
  1648.      Description:
  1649. This is used by LogStr() to count the number of output lines it has processed.
  1650. Possible values:
  1651. Integer
  1652. Can be Modified:  Only by LogStr().
  1653. Used by :LogStr().
  1654.     Modified by : LogStr().
  1655. gMachineName
  1656. Description :
  1657.    Name of the target machine.
  1658. Possible values: 
  1659.     String
  1660. Can be Modified:   No
  1661. Used by :  TCSEnd(), SuiteEnd(), SuiteStart()
  1662. Modified by : none
  1663.     gPatchLaunchTwitch
  1664.     Description:
  1665. Indicates whether or not the standard launching mechanism in SPEC S&L will be used.
  1666.     Possible values:
  1667. Boolean - 0 (Use Standard Launching Mechanism) or 1  (Use custom Launching Mechanism)
  1668. Can be Modified:   Yes
  1669. Used by : LaunchTwitch()
  1670. Modified by :  Scripts
  1671.     gPrevAppTitle 
  1672.     Description:
  1673. This contains the name of the last application that was running, and should be utilized when twitching back to a previous application is required. e.g. Scrapbook tests require twitching back to the previous application.
  1674.     Possible values:
  1675. String
  1676. Can be Modified: Only LaunchTwitch().
  1677. Used by : Scrapbook(),
  1678. Modified by :  LaunchTwitch().
  1679.     gPrintTest - Not currently supported    
  1680. Description :
  1681. Flag which indicates whether or not print testing will occur.
  1682. Possible values: 
  1683.     Integer - Boolean ( 0 or 1 )
  1684. Used by : 
  1685. Modified by :  Scripts
  1686.     gSFPUTLocation 
  1687. Description :
  1688. SF_PutLocation contains the path to the directory in which files will be saved by the task SaveAs(). If the list is empty files will be saved in the default directory. Example:  SF_PUTLocation := {"myDisk"};
  1689. Possible values: 
  1690.     List
  1691. Can be Modified:   Yes
  1692. Used by :  SaveAs()
  1693. Modified by :  Scripts
  1694.     gSFOriginalPath  
  1695.     Description:
  1696. This contains the path for Standard File before navigation occurs. It is updated every time navigation occurs in Standard File from SaveAs() or OpenFile(). It can be used as a mechanism to navigate back to your original directory.
  1697.     Possible values:
  1698. List
  1699. Can be Modified:   Normally only by the library routines listed below.
  1700. Used by : Could be used by scripts.
  1701. Modified by :  SFNavigate(), 
  1702.     gSpectest 
  1703.     Description:
  1704. Indicates whether or not any special tests designated by calls to  DoSpecialTest() will be completed. Note: DoSetUpApp() and DoCloseApp() are the only library tasks which make calls to DoSpecialTest().
  1705.     Possible values:
  1706.     Integer - Boolean ( 0 or 1 )
  1707. Can be Modified:   Yes
  1708. Used by : Scripts
  1709. Modified by :  Scripts
  1710. gTargetCheck
  1711.     Description:
  1712. Most output is funneled through a single task LogStr(). LogStr() will append the name of the target application to any output if the gTargetCheck is true.
  1713.     Possible values:
  1714. Integer - Boolean ( 0 or 1 )
  1715.     Can be Modified: Yes
  1716.     Used by : LogStr()
  1717.     Modified by : Scripts prior to or during runtime.
  1718.     
  1719.     gTextStr 
  1720. Description :
  1721. A text string used when typing in the Font and Draw libraries.
  1722. Possible values: 
  1723.     String
  1724. Can be Modified: Yes
  1725. Used by :  CheckSetup(), DoText(), Scripts
  1726. Modified by : InitGlobals(), Scripts
  1727.         
  1728.     gDoWindowList 
  1729. Description :
  1730. This is a list of flags indicating which window tests are appropriate for a given aplication. By setting each element to 1 or 0 the script writer can specify whether a certain type of window testing will be performed from the task DoWindows() for a given application. Redefine this in your application script if your application cannot do all of the window tests specified below,  e.g. if VU can't recognize the scroll bars, in your app script define global gDoWindowList := {1,0,1,1};. (See example in Canvas.vu)
  1731.     First element - Sizing.
  1732.     Second element - Scrolling.
  1733.     Third element - Dragging.
  1734.     Fourth element - Zooming.
  1735. Possible values: 
  1736.     List of  Boolean integers( 0 or 1 )
  1737. Can be Modified:   Yes
  1738. Used by :  DoWindows(), TestWindow()
  1739. Modified by : Scripts
  1740. Task Reference (Related to Globals) 
  1741. gExitVU 
  1742. Description :
  1743. This task makes the built in VU task Exit. The purpose of defining this as a task is so we can use a task  reference to this task- gExitVU. This way we can default  our Exception Handling task to call the task reference gExitVU and thus exit. If others do not want to exit, they can redefine the task reference to what ever task they prefer.
  1744. Possible values: 
  1745. Task reference
  1746. Can be Modified:   Yes
  1747. Used by :  Globals.Lib
  1748. Modified by : Must be defined in Custom.Lib for overwriting it
  1749. Launching/Quitting
  1750.     gBackgroundQuit 
  1751. Description :
  1752. Flag indicating whether or not to use the BackgroundQuit mechanism. The background quit mechanism means that the task Quit() will not actually quit the current application, rather it will close all open windows. When the task launchTwitch() attempts to launch a new application a dialog will appear prompting background quitting to free enough memory to launch. If gBackgroundQuit is enabled the “OK” button will be selected, otherwise, the “Cancel” button will be selected.
  1753. Possible values: 
  1754.     Integer - Boolean ( 0 or 1 )
  1755. Can be Modified:   Yes
  1756. Used by :  Quit(), QuitBackgroundApps(), TwitchQuit()
  1757. Modified by : Scrapbook(), LaunchFillMemApp, Scripts
  1758.     gFillMemory 
  1759. Description :
  1760. Flag indicating whether or not to use the FillMemory mechanism. The FillMemory mechanism means that the task Launchtwitch() will launch another application <global gFillMemApp> (see gFillMemApp  below)  after it has successfully launched the desired application. Quit() will also quit the <gFillMemApp> when quitting.
  1761. Possible values: 
  1762.     Integer - Boolean ( 0 or 1 )
  1763. Can be Modified:   Yes
  1764. Used by :  Quit(), LaunchTwitch()
  1765. Modified by : Scrapbook(), TwitchQuit(), LaunchFillMemApp(), Scripts
  1766.         
  1767.     gFillMemApp
  1768. Description :
  1769. The name of the application that is to be used to fill memory in the FillMemory mechanism (see gFillMemory above). Set this application's memory allocation high enough to use up all additional memory on the target machines, place it's alias in the Apple menu or in the alias directory.
  1770. Possible values: 
  1771.     Integer - Boolean ( 0 or 1 )
  1772. Can be Modified:   Yes
  1773. Used by :  Quit(), LaunchFillMemApp()
  1774. Modified by : Scripts
  1775.     
  1776.     gForceQuit 
  1777. Description :
  1778. Flag indicating whether or not to use the ForceQuit mechanism. The ForceQuit mechanism means that the task Quit() will not quit the current application. It won't do anything. When the task launchTwitch() attempts to launch a new application, if a dialog appears stating that there is not enough memory to launch, Launchtwitch() will twitch to and quit applications until it can successfully launch the desired applicaton.
  1779. Possible values: 
  1780.     Integer - Boolean ( 0 or 1 )
  1781. Can be Modified:   Yes
  1782. Used by :  Quit(), TwitchQuit(), LaunchAssist()
  1783. Modified by : Scrapbook(), LaunchFillMemApp(), TwitchQuit(), Scripts
  1784.         
  1785. Scrapbook Constants 
  1786. The following constants are provided so that scripts can have access to different types of data without relying on hardcoding the position in which they appear in the Scrapbook into each script. It is appropriate to set these global variables prior to execution so that they reflect the appropriate positions, they are static at runtime. 
  1787. kScrapTEXT     := 1;    # Test is 1st position
  1788. kScrapPICT     := 2;    # PICT is 2nd position
  1789. Controlling The Test Level
  1790. Control to the test level is provided by the script parameter “ScriptLevel”, 
  1791.     Script MacDrawPro (ScriptLevel := -1)
  1792. which can be defined as a list. 
  1793. { level, {  {'method', method level, times to be performed  } },..
  1794. The first element of the list controls the amount or level of testing to be performed for  'Draw', 'Window', 'Font' and 'AppTestLevel'. The possible values that each method can have are:
  1795. -1 - undefined
  1796.  0 - no test to perform, unless a custom test method is specified
  1797.  1 - least amount of testing
  1798.  2 - medium amount of testing
  1799.  3 - most amount of tetsing
  1800. The second element of the list is optional and can be defined as a list of lists, specifiying one or more methods to test in a customized manner. You can specify not only the method and the level for that method, but also the number of times to perform that method.
  1801. This convention can be illustrated with the following examples:
  1802. Script MacDrawPro ( {3} ) 
  1803.     # perform the most amount of testing for all four methods
  1804. Script MacDrawPro ( {0, { { {'Draw', {3}}} }) 
  1805.     # Custom control, only perform the Draw method test at the most level.
  1806. Script MacDrawPro ({ 2, { { {'Draw', {3, 3}}} } ) 
  1807.     # Custom control, perform medium test for 'Window', 'Font. In addition,          perform the Draw method at the most level, three times.
  1808. Script MacDrawPro ( {3, {  {'Font',{3,5}}, {'Window',{2,4}} } } )  
  1809.     # Custom control, perform most test. In addition,  perform Font method at     the most level, five times. And the Window method at medium level, four     times.
  1810. Test Method Constants 
  1811. The following set of constants allow a script writer to set the behavior of several of the high level test methods e.g. DoDraw(), DoText(). If a parameter has been passed into any of these tasks, the constants will not override the parameter. The SPEC S&L scripts do not pass parameters to these tasks, but utilize these constants when determining the test method.
  1812.     gDrawLevel
  1813.                     
  1814.     Can be defined as a list
  1815.     Possible values:
  1816. 0  - indicates that DoDraw() will not perform any draw testing.
  1817. 1  -indicates that DoDraw() will create a random object for one of the tools defined within gToolList within a particular script (see section titled Using the Draw Libraries for more details) .
  1818. 2  -indicates that DoDraw() will create a random object for all of the tools defined within gToolList within a particular script (see section titled Using the Draw Libraries for more details) .
  1819.     
  1820.     gWindowLevel                     
  1821.     Possible values:
  1822. 0  - indicates that DoWindow() will not perform any window tests.
  1823. 1  -indicates that DoWindow() will perform a limited set of window tests.
  1824. 2  -indicates that DoWindow() will perform a complete set of window tests.
  1825.     gFontLevel            
  1826.     Possible values:
  1827. 0  - indicates that DoText() will not perform any font tests.
  1828. 1  -indicates that DoText() will perform a random set of font tests one of the fonts defined in gFontList (see section Exercising Fonts).
  1829. 2  -indicates that DoText() will perform a random set of font tests for each font defined in gFontList (see section Exercising Fonts).
  1830. 3  -indicates that DoText() will perform a waterfall set of font test for each font defined in gFontLists (see section Exercising Fonts).
  1831.     
  1832.     gNumRandomFontTests := 1;
  1833.     Possible values:
  1834. integer  - indicates number of random font tests that will be generated from gFontMethod := 3; (see above).
  1835. Initialized In The Initdraw Task
  1836. Task name    - InitDraw()
  1837. Location    - Draw.Lib
  1838. Initialize    - Must be initialized from within scripts prior to making any calls.
  1839. Misc. Draw Related Script Global variables
  1840. The following global variables(constants) are default values and if an application needs to override them it should be done from within the script. 
  1841.     
  1842.     gBoundingRect                
  1843. Description :
  1844.     Rectangle in which points will be generated for random drawing. If this is not defined the rectangle of the document window (less the gWindowInset) will be used. 
  1845.     Possible values: 
  1846.     List
  1847. Can be Modified:   Yes
  1848. Used by : MakePointList()
  1849. Modified by : DoWPTools(), Scripts 
  1850.     gDrawObject                                
  1851. Description :
  1852.     We generate TCS records for many of the actions that occur when calling the SPEC S&L libraries. Since multiple TCS's are often generated when performing a single action it is important to tie multiple TCS records together. gDrawObject is used to tie together the TCS records that are generated when drawing an object using the Draw Libraries. This is initialized in InitControlGlobals() and incremented in DrawObject() in 'Draw.Lib'. Script writers should not change this value explicitly.
  1853. Possible values: 
  1854.     Integer 
  1855. Can be Modified:   Only by DrawObject()
  1856. Used by : SetAttributes()
  1857.         Modified by : DrawObject()    
  1858.     gLineWeights 
  1859. Description :
  1860.     If an application utilizes menus instead of a palette to set line weights, this list should be defined as the names of the menuItems which are line weights. This list will only be accessed if  gSetLine is set to Task SetLineMenuItems() (see gSetLine above). It should be redefined by individual scripts if necessary, not altered in InitControlGlobals().  Note:  The task SetLineMenuItems() has been provided in the libraries since it is a common task override to SetLine().
  1861. Possible values: 
  1862.     List
  1863. Can be Modified:   Yes
  1864. Used by : SetLineMenuItems()
  1865. Modified by :  Scripts
  1866.         gNumPoints
  1867. Description :
  1868.     Many of the tools available, defined in the Draw Libraries require numerous points to generate a given object. This indicates the number of points to generate for any multipoint tool.
  1869. Possible values: 
  1870.     Integer greater than 2.
  1871. Can be Modified:   Yes
  1872. Used by : SetPointList()
  1873. Modified by :  Scripts
  1874.     gScreenInset
  1875. Description :
  1876.     Inset into the screen region of the main monitor. Applications will often create regions which are not accessible, e.g. it is not possible to drag a window where the menubar is drawn.
  1877. Possible values: List
  1878. Can be Modified:   Yes
  1879. Used by :TestWindow(), WindowFunction(), DragWindow(), SizeWindow()
  1880. Modified by :  Scripts
  1881.     
  1882.     gVoidRect
  1883. Description :
  1884.     Rectangle in which points will not be generated for random drawing. If this is not points will be generated in this rectangle within the applications window. This rect should be defined in coordinates that are relative to the top left corner of the applications document window. 
  1885.     Possible values: 
  1886.     List
  1887. Can be Modified:   Yes
  1888. Used by : MakePointList()
  1889. Modified by :  Scripts
  1890.     gWindowInset
  1891. Description :
  1892.     Inset into the content region of the document window. It is not always possible to have access to all portions of a document window. For example,  it is not possible to draw in the scroll bar section of a document window.
  1893.     Possible values: List
  1894. Can be Modified:   Yes
  1895. Used by : MakePointList() .
  1896. Modified by :  Scripts
  1897. Task References  (Draw Related)
  1898. The follow set of task references define which default library tasks are used to perform certain functionality. If there is a need to override any of these task references, all overriding should occur in the script where overriding is necessay. Many of the  SPEC S&L scripts depend upon the default settings to execute properly. Task references are not supported in Virtual User 1.x,  thus depend upon Virtual User 2.0x.
  1899. gSetColor     := Task SetColor;
  1900.     Description: 
  1901. Indicates the task that will be called to set colors when drawing objects using the Draw.Libs.
  1902.     Possible values:
  1903. Task reference
  1904. Can be Modified:   Yes
  1905.     Used by : SetAttributes().
  1906.     Modified by :  Scripts
  1907. gSetLine     := Task SetLine;
  1908.     Description: 
  1909. Indicates the task that will be called to set line weights when drawing objects using the Draw.Libs.
  1910.     Possible values:
  1911. Task reference
  1912. Can be Modified:   Yes
  1913.     Used by : SetAttributes().
  1914. Modified by :  Scripts
  1915.     
  1916. gSetPattern := Task SetPattern;
  1917.     Description: 
  1918. Indicates the task that will be called to set patterns when drawing objects using the Draw.Libs.
  1919.     Possible values:
  1920. Task reference
  1921. Can be Modified:   Yes
  1922.     Used by : SetAttributes().
  1923. Modified by :  Scripts
  1924. Tool Type Constants 
  1925. The following set of constants is used to provide a unique label for different types of tools. These global variables are not configurable, and should not be altered.
  1926.     
  1927.     kClick             := 1;
  1928.     kDrag             := 2;
  1929.     kDragClick             := 3;
  1930.     kMultiDrag            := 4;
  1931.     kMultiClick             := 5;
  1932.     kMultiClickDrag         := 6;
  1933. Palette Type Constants 
  1934. The following set of constants is used to provide a unique label for different types of palettes. These global variables are not configurable, and should not be altered.
  1935.     kPalDocWind        := 1;
  1936.     kPalWind             := 2;
  1937.     kPullOffPal            := 3;
  1938.     kPopUpPal             := 4;
  1939.     kScrollPal             := 5;
  1940. Initialized In The Initfonts Task
  1941. Task name    - InitFonts()
  1942. Location    - Font.Lib
  1943. Initialize-     - Must be initialized from within scripts prior to making any calls.
  1944. Misc. Font Related Script Global Variables
  1945. The following global variables(constants) are default values and if an application needs to override them it should be done from within the script. 
  1946. gFontObject    
  1947. Description :
  1948.     We generate TCS records for many of the actions that occur when calling the SPEC S&L libraries. Since multiple TCS records are often generated when performing a single action it is important to tie multiple TCS's together. gFontObject is used to tie together the TCS records that are generated when exercising Fonts, an object using the Font Libraries. This is initialized in InitControlGlobals() and incremented in: WaterFallFontTest() in 'Font.Lib', and DoText() in 'DoTasks.Lib'. Script writers should not change this value explicitly.
  1949. Possible values: 
  1950.     Integer 
  1951. Can be Modified:   Only by the tasks specified below.
  1952. Used by : WaterFallFontTest(), DoText()
  1953. Modified by :  WaterFallFontTest(), DoText()
  1954. gFontList
  1955. Description :
  1956. List containing the names of font menu items which will be used by DoText when exercising fonts. 
  1957. Possible values: 
  1958.     List of strings.
  1959. Can be Modified:   Yes
  1960. Used by : DoText(), RandomFontRecords(), WaterfallTest(), QuickLookTextTest() not currently supported.
  1961. Modified by : InitFonts(), Scripts
  1962.     gFontSizeList 
  1963. Description :
  1964. List containing the names of font size menu items which will be used by DoText when exercising fonts. 
  1965. Possible values: 
  1966.     List of strings.
  1967. Can be Modified:   Yes
  1968. Used by :  SetSize(), RandomFontRecords(), WaterfallTest(), 
  1969.     QuickLookTextTest() not currently supported.
  1970. Modified by :  InitFonts(), Scripts
  1971.     gFontStyleList
  1972. Description :
  1973. List containing the names of font style menu items which will be used by DoText when exercising fonts. 
  1974. Possible values: 
  1975.     List of strings.
  1976. Can be Modified:   Yes
  1977. Used by :  RandomFontRecords(), WaterfallTest(), 
  1978. Modified by : InitFonts(), Scripts
  1979.     gNextLineMethod            
  1980. Description :
  1981. Method which will place the insertion point so that it is ready for a new line of text.
  1982. Possible values: 
  1983.     Integer or List
  1984. 1 - ReturnKey, 
  1985. 2 - EnterKey
  1986. 3 - DownArrow Key
  1987. 4 - TabKey
  1988. {} - Move/Click
  1989. {'Untitled'} - Move relative to the window titled 'Untitled' /Click
  1990. Can be Modified:   Yes
  1991. Used by :  NextLine()
  1992. Modified by : InitFonts(), Scripts
  1993.     
  1994.     gNextLineClearsFontSettings 
  1995. Description :
  1996. Flag indicating whether moving to the next line clears all currently selected font sizes and styles and resets back to a default value.
  1997. Possible values: 
  1998.     Integer - Boolean ( 0 or 1 )
  1999. Can be Modified:   Yes
  2000. Used by :  WaterfallTest()
  2001. Modified by : InitFonts(), Scripts
  2002.     gPlainStyle
  2003. Description :
  2004. Name of the Plain style menu item or name of the menu item which removes all font styles.
  2005. Possible values: 
  2006.     String
  2007. Can be Modified:   Yes
  2008. Used by :  WaterfallTest(), SetFontParams()
  2009. Modified by : InitFonts(), Scripts
  2010. Task References (Font Related) 
  2011. The following set of task references define which default library tasks are used to perform certain functionality. If there is a need to override any of these task references, all overriding should occur in the script where overriding is necessay. Many of the  SPEC S&L scripts depend upon the default settings to execute properly. Task references are not supported in Virtual User 1.x,  thus depend upon Virtual User 2.0x.
  2012. gSetFont      := Task SetFont;
  2013.     Description: 
  2014. Indicates the task that will be called to set fonts when exercising fonts using Font.Lib.
  2015.     Possible values:
  2016. Task reference
  2017. Can be Modified:   Yes
  2018.     Used by : SetFontParams().
  2019. Modified by :  Scripts
  2020.     
  2021. gSetSize      := Task SetSize;
  2022.     Description: 
  2023. Indicates the task that will be called to set font sizes when exercising fonts using Font.Lib.
  2024.     Possible values:
  2025. Task reference
  2026. Can be Modified:   Yes
  2027.     Used by : SetFontParams().
  2028. Modified by :  Scripts
  2029. gSetStyle     := Task SetStyle;
  2030.     Description: 
  2031. Indicates the task that will be called to set font styles when exercising fonts using Font.Lib.
  2032.     Possible values:
  2033. Task reference
  2034. Can be Modified:   Yes
  2035.     Used by : SetFontParams().
  2036. Modified by :  Scripts
  2037. gNextLine     := Task NextLine;
  2038.     Description: 
  2039. Indicates the task that will be called to move to the next line to enter additional lines of text when exercising fonts using Font.Lib.
  2040.     Possible values:
  2041. Task reference
  2042. Can be Modified:   Yes
  2043.     Used by : ReportSelectedMenuItems().
  2044. Modified by :  Scripts
  2045. Initialized In The Initrandomseed Task
  2046. Task name    - InitRandomSeed()
  2047. Location    - Globals.Lib
  2048. Initialize    - Automatically initialized by InitGlobals().
  2049.     
  2050.     gSeedValue
  2051. Description :
  2052. This is the value which will be seeded to the Virtual User built in task randomSeed(). It is used to generate all random numbers during runtime. Tests can be produced which contain randomness. If it is necessary to reproduce these tests it is possible by seeding the RandomSeed with the same integer. If gSeedValue is set to 0 a random number will be generated and output for possible use when reseeding.
  2053. Possible values: 
  2054.     Integer 
  2055.         0 := Generate a random seed.
  2056.         Any other integer := Use the value as actual random seed.
  2057. Can be Modified:   Yes
  2058. Used by :  InitRandomSeed(), SuiteStart()
  2059. Modified by : InitRandomSeed(), Scripts
  2060.     gSeedZero     
  2061. Description :
  2062. Flag indicating whether or not the gRandomSeed (seen above) should be set to zero. Setting this global to true indicates that the gSeedValue will equal zero.
  2063. Possible values: 
  2064.     Integer - Boolean ( 0 or 1 )
  2065. Can be Modified:   Yes
  2066. Used by :  InitRandomSeed()
  2067. Modified by : Scripts
  2068. Undefined Task References - Hooks 
  2069. The following series of global variables are undefined tasks references.  They have been provided as a hook into the libraries so that script writers have the flexibility to call custom tasks which may be required when performing certain functions. 
  2070. A task reference is similar to a Proc Pointer in other programming languages.  An undefined task reference is similar to a call back routine in that it will only be called if a script writer defines it.   The following example illustrates the way in which undefined task references are used:
  2071. Task ScrapbookTest(ScrapItem)
  2072. begin
  2073.     
  2074.     if (global gScrapbookSetup)    # Hook to do anything prior to
  2075.         call (gScrapbookSetUp);    # Scrapbook call
  2076.     
  2077.     Scrapbook(ScrapItem);        # Call to Scarpbook
  2078. end;
  2079. If a script writer isn't interested in doing any setup prior to the call to the Scrapbook() task, defining the gScrapbookSetup hook would not be required since gScrapBookSet is undefined by default. However, if a script writer wanted to make use of this task reference the global gScrapbookSetUp should be defined as the desired task prior to making the call to the ScrapbookTest() task. For example:
  2080.     global gScrapbookSetUp    := Task myScrapSetup;    
  2081.     
  2082. Example Mechanism for Using Task References - Hooks
  2083. Often times when using task reference hooks provided by SPEC S&L
  2084. you will need parameters which you may or may not have access to.
  2085. The following example is one method of using the task reference hooks
  2086. which gets around this problem of not having access to the parameters.
  2087.  
  2088. For instance, you have a task, TaskA. TaskA has a undefined task reference 
  2089. (also refered to as a hook), Hook1, which you are interested in using.  
  2090. However, you need to have access to some of TaskA's parameters in Hook1. 
  2091. In order to do this write a new task, TaskB, which calls TaskA. Before calling 
  2092. TaskA, TaskB defines a global variable equal to any/all of the parameters you are
  2093. interested in. Now Hook1 has access to TaskA a parameters by accessing this
  2094. global variable. Instead of calling TaskA you should call TaskB so Hook1 will 
  2095. function as expected.
  2096. The example that follows uses the task OpenFile() which contains the undefined task  reference 'gOpenFileHook1'.
  2097. Task OpenFileWrapper(pNameDoc := "", pSelectOpen := 1, pPathList :={},     pPartialPath := 0)
  2098. begin
  2099.     # Define the Hook
  2100.     global gOpenFileHook1 := Task SelectFileType;    
  2101.     
  2102.     # Define the parameters you are interested in to a global variable.
  2103.     global gOpenFileHook1Params := pNameDoc;                    
  2104.     
  2105.     # Call the original task 
  2106.     OpenFile(pNameDoc, pSelectOpen, pPathList, pPartialPath)
  2107. end;
  2108. Hooks Provided In Spec S&L
  2109. Hook Name
  2110. Purpose
  2111.     Used by
  2112.     
  2113. gClearDoText    a hook in DoText() for any cleanup that needs to happen after text tests end.    DoText()    
  2114. gCustomScrapPict    to replace the default call to Scrapbook (global kScrapPICT) in DoSetupApp () with your own set of calls.    DoSetUpApp()    
  2115. gCustomScrapText    to replace the default call to Scrapbook (global kScrapTEXT) in DoSetupApp () with your own set of calls. 
  2116.     DoSetUpApp()    
  2117. gDismissSFPut    a hook in SaveAs () at the end of the SaveAs() tasks for various dialogs.
  2118.     DoText()    
  2119. gDoCloseAppHook1to do anything before any actions are taken in DoCloseApp()    DoCloseApp()
  2120.     
  2121. gDoCloseAppHook2hook to do anything after printing    DoCloseApp()
  2122.     
  2123. gDoCloseAppHook3hook to do anything after quiting the app    DoCloseApp()
  2124.     
  2125. gDoSetupAppHook1hook to do anything before DoSeupApp() actions are completed    DoSetupApp()
  2126.     
  2127. gDoSetupAppHook2replaces DoSpecialTest(1) with 1 as parameter. Hook to do anything after dismissing opening diaolog.    DoSetupApp()
  2128.     
  2129. gLaunchTwitchHook1hook to do anything prior to Preflight    LaunchTwitch()
  2130.     
  2131. gLaunchTwitchHook2hook to do anything prior to any type of launching    LaunchTwitch()
  2132.     
  2133. gLaunchTwitchHook3hook to do anything prior to launching by type selecting    LaunchTwitch()
  2134.     
  2135. gLaunchTwitchHook4hook to do anything priot to returning    LaunchTwitch()
  2136.     
  2137. gLogStrHookhook to do anything after logging    LogStr()
  2138.     
  2139. gModifyDocument     to do something other than the default for modifying a document (which is typing a string of text),  e.g. if you need to paste from the scrapbook in order to modify your document. Requires a return value to indicate success or failure. (See example in the Canvas.vu sample script.)
  2140.     ModifyDocument()    
  2141. gOpenFileHook1before typing the name of the document to be opened.
  2142.     OpenFile()    
  2143. gPatchLaunchTwitchhook to substitute SPEC S&L's launching with another method    LauchTwitch()
  2144.     
  2145. Hook NamePurpose    Used by    
  2146. gPreSelectButtonHook    a hook in SelectButton() before selecting a button.
  2147.     SelectButton()    
  2148. gPreSelectMenuItemHook    a hook in SelectMenuItem() before selecting a menu item.
  2149.     SelectMenuItem()    
  2150. gPostSelectMenuItemHook    a hook in SelectMenuItem() after selecting a menu item.
  2151.     SelectMenuItem()    
  2152. gPreKeyEqHook    a hook in KeyEq() before selecting a key equivalent.
  2153.      KeyEq()    
  2154. gPreMoveMouseHook    a hook in MoveMouse() before moving the mouse.
  2155.     MoveMouse()    
  2156. gPreSpecialKeyHook    a hook in SpecialKey() before selecting a special key.
  2157.     SaveAs()    
  2158. gReportSelectedMenuItems    to replace the default calls in  ReportSelectedMenuItems() with your own set of calls. 
  2159.     DoText(), WaterfallFontTest()    
  2160. gSetupDoDraw    to do something prior to performing tests using DoDraw().
  2161.     DoDraw()    
  2162. gSetUpForSaveDoc    to do additional set up before saving a document,  e.g. closing a window.
  2163.     DoSetUpApp()    
  2164. gSetupDoText    to do something prior to performing tests using DoText().
  2165.     DoText()    
  2166. gSaveAsHook1    a hook in SaveAs(). For example, saving files in other formats.
  2167.     SaveAs()    
  2168. gSaveAsHook2a hook in SaveAs(). For example,  after saving a document.
  2169.     SaveAs()    
  2170. gSaveAsHook3a hook in SaveAs(). For example,  to dismiss additional dialogs after a save, such as the summary-info dialog in Microsoft Word v.5.0.
  2171.     SaveAs()    
  2172. gSuiteFooterHookused to add information to the suite footer    SuiteEnd()
  2173.     
  2174. gTCSStartHook1hook to do anything before TCSStart si called    TCSStart()
  2175.     
  2176. gTypeStrOverRideused to manipulate strings that contain two-byte characters    TypeStr()    
  2177.  
  2178. Appendix H - Test Cases in SPEC S&LOwner /
  2179. TCType    TCSet : TC#    Desc    Task    Library    
  2180. SPECS&L
  2181. Compatibility    Launch : 1    Launch '{ItemName}' via Apple Menu    LaunchByAppleMenu    LaunchQuit.Lib    
  2182. SPECS&L
  2183. Compatibility    Launch : 2    Launch '{AppName}' via Type Select    LaunchByTypeSelect    LaunchQuit.Lib    
  2184. SPECS&L
  2185. Compatibility    Launch : 3    Launch or twitch to '{AppName}'    LaunchTwitch    LaunchQuit.Lib    
  2186. SPECS&L
  2187. Compatibility    Launch : 4    Twitch from {global gapptitle} to {AppName} via process list    Twitcher    LaunchQuit.Lib    
  2188. SPECS&L
  2189. Compatibility    Quit : 1    Selected the 'Quit' menuitem    Quit    LaunchQuit.Lib    
  2190. SPECS&L
  2191. Compatibility    Quit: 2    Typed command - Q    Quit    LaunchQuit.Lib    
  2192. SPECS&L
  2193. Compatibility    Quit: 3    BG Quit - Selected 'Quit Application(s)'    QuitBackgroundApps    LaunchQuit.Lib    
  2194. SPECS&L
  2195. Compatibility    Quit : 4    BG Quit - Selected 'Cancel'    QuitBackgroundApps    LaunchQuit.Lib    
  2196. SPECS&L
  2197. Compatibility    SFSaveDoc : 1    SaveAs    SaveAs    StandardFile.Lib    
  2198. SPECS&L
  2199. Compatibility    SFSaveDoc : 2    Save a new file    SaveAs    StandardFile.Lib    
  2200. SPECS&L
  2201. Compatibility    SFSaveDoc: 3    CancelNewName    ReplaceExist    StandardFile.Lib    
  2202. SPECS&L
  2203. Compatibility    SFSaveDoc : 4    ReplaceExisting    ReplaceExist    StandardFile.Lib    
  2204. SPECS&L
  2205. Compatibility    SFSaveDoc : 5    SaveAs/Cancel -> Cancel Button    CancelStandardFile    StandardFile.Lib    
  2206. SPECS&L
  2207. Compatibility    SFSaveDoc : 6    SaveAs/Cancel -> Command Period/Escape    CancelStandardFile    StandardFile.Lib    
  2208. SPECS&L
  2209. Compatibility    SFSaveDoc : 7    Save using Save menuitem    Save    StandardFile.Lib    
  2210. SPECS&L
  2211. Compatibility    RevertDoc : 1    Modify a Document    ModifyDocument    StandardFile.Lib    
  2212. SPECS&L
  2213. Compatibility    RevertDoc : 2    Revert    Revert    StandardFile.Lib    
  2214. SPECS&L
  2215. Compatibility    SFOpenDoc : 1    OpenFile    OpenFile    StandardFile.Lib    
  2216. SPECS&L
  2217. Compatibility    NewDoc : 1    Select File - New...    DoSetUpApp    DoTasks.Lib    
  2218. SPECS&L
  2219. Compatibility    ScrapBook : 1    ScrapBook -> PICT    Scrapbook    DA.Lib    
  2220. SPECS&L
  2221. Compatibility    ScrapBook : 2    ScrapBook -> Text    Scrapbook    DA.Lib    
  2222. SPECS&L
  2223. Compatibility    ScrapBook: 3    ScrapBook -> General    Scrapbook    DA.Lib     
  2224. SPECS&L
  2225. Compatibility    Font : 1    SetFont    SetFont    Font.Lib    
  2226.                     
  2227. Owner /
  2228. TCType    TCSet : #    Desc    Task    Library    
  2229. SPECS&L
  2230. Compatibility    Font : 2    SetSize    SetSize    Font.Lib    
  2231. SPECS&L
  2232. Compatibility    Font: 3    SetStyle    SetStyle    Font.Lib    
  2233. SPECS&L
  2234. Compatibility    Font : 4    SelectedItemsString    ReportSelectedMenuItems    Font.Lib    
  2235. SPECS&L
  2236. Compatibility    PageSetup : 1    Select 'Page Setup'    PageSetup    Print.Lib    
  2237. SPECS&L
  2238. Compatibility    PageSetup : 2    Dismiss the Page Setup Dialog    PageSetup    Print.Lib    
  2239. SPECS&L
  2240. Compatibility    UIWindowDrag : 1    DragWindow    DragWindow    UserInterface.Lib    
  2241. SPECS&L
  2242. Compatibility    UIWindowDrag : 2    DragAcrossScreens    DragAcrossScreens    UserInterface.Lib    
  2243. SPECS&L
  2244. Compatibility    UIWindowDrag: 3    DragReturn    DragWindow    UserInterface.Lib    
  2245. SPECS&L
  2246. Compatibility    UIWindowClose : 1    CloseBox    CloseWindow    UserInterface.Lib    
  2247. SPECS&L
  2248. Compatibility    UIWindowClose : 2    CloseFromFileMenu    CloseWindow    UserInterface.Lib    
  2249. SPECS&L
  2250. Compatibility    UIWindowClose: 3    CloseFromKeyEq    CloseWindow    UserInterface.Lib    
  2251. SPECS&L
  2252. Compatibility    UIWindowScroll : 1    VerticalScroll    ScrollWindow    UserInterface.Lib    
  2253. SPECS&L
  2254. Compatibility    UIWindowScroll : 2    HorizontalScroll    ScrollWindow    UserInterface.Lib    
  2255. SPECS&L
  2256. Compatibility    UIWindowSize : 1    SizeWindow    SizeWindow    UserInterface.Lib    
  2257. SPECS&L
  2258. Compatibility    UIWindowSize : 2    SizeAcrossScreens    SizeAcrossScreens    UserInterface.Lib    
  2259. SPECS&L
  2260. Compatibility    UIWindowMiscOp : 1    Zoom    ZoomWindow    UserInterface.Lib    
  2261. SPECS&L
  2262. Compatibility    AboutBox : 1    Select 'About...'    AboutBox    Misc.Lib    
  2263. SPECS&L
  2264. Compatibility    AboutBox : 2    Dismiss About Box    AboutBox    Misc.Lib    
  2265. SPECS&L
  2266. Compatibility    AppSetup : 1    Dismissed opening dialog    DoSetUpApp    DoTasks.Lib    
  2267. SPECS&L
  2268. Compatibility    AppSetup : 2    Dismissed new document dialog    DoSetUpApp    DoTasks.Lib    
  2269. SPECS&L
  2270. Compatibility    Draw : 1    SetLineMenuItems     SetLineMenuItems    Draw.Lib    
  2271. SPECS&L
  2272. Compatibility    PalettePicker : 
  2273. 1 to 999    PalettePicker -> xyy (x indicates palette number - yy indicates tool number)    PalettePicker    Palette.Lib    
  2274. SPECS&L
  2275. Compatibility    ToolPalette : 
  2276. 1 to 999    SelectFromCoord -> the TC# indicates tool number    SelFromCoord    Palette.Lib    
  2277.  
  2278. Appendix I - Utility Tools
  2279. Many tools have been developed that aid developing automated Virtual User scripts. This section details the tools that seem to be most useful for us.
  2280. MouseTrap
  2281. An application which displays mouse coordinates. It displays global mouse coordinates, mouse coordinates relative to the top left corner of the front window, and mouse coordinates relative to the last click. This tool is very handy when setting up data structures for Draw tools
  2282. vuCollect
  2283. Collects, formats and displays VU descriptor information. It's very useful to capture menu names, window names and to determine what VU can recognize.
  2284. MiniLauncher
  2285. An application that launches other applications, or files. It also allows for printing files from the Finder.
  2286. OnTarget
  2287. VU external tool which provides services that extend the feature set available from Virtual User. Services include: 
  2288.     Service "BitDepth"() return 'integer';
  2289.     Service "MonitorCount"() return 'integer';
  2290.     Service "ColorCheck"( 'integer' ) return  'integer';
  2291.     Service "SetColor"( 'integer' ) return  'integer';
  2292.     Service "CacheTest"() return 'integer';
  2293.     Service "FileShare"() return 'integer';
  2294.     Service "DiskSpace"() return 'list';
  2295.     Service "GDelete"('integer', 'string');
  2296.     Service "vers"('string', 'string') return 'list';
  2297.     
  2298. To access services use the OnTarget.vu VU library. For additional information see OnTarget documentation.
  2299. Notes
  2300. Ç◊#ˇ ˇˇˇˇ#◊°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ 
  2301. _,Times
  2302. .ˇ°dONLNd1†IÖ(bæThe HitchHiker's Guide†ó°ñ°dONLNdI¨az+ to SPEC S&L v.1.0.1†ó°ñ†ó°ñ
  2303. °dONLNd+mΔ|a+Document Version 1.0.1v.3†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†óˇz◊#ˇ ˇˇˇˇ#◊ 
  2304. _, New York
  2305. .ˇ°dONLNdˇˇ(ä/ ˇ6÷◊#ˇ ˇˇˇˇ#◊°ñ 
  2306. _,Times
  2307. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄¸III†ó°ñ
  2308. °dONLNd)Û<2(VContents†ó°ñ†ó°ñ
  2309. °dONLNd    G`SÀ(o~About This Document†ó°ñ°dONLNdˇˇ)m ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.........................°dONLNdˇˇ(oÈ †ó°ñ°dONLNdG⁄S‡(o¯6†ó°ñ°dONLNdS`_õ({~ Introduction†ó°ñ°dONLNdˇˇ)= ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`    .........°dONLNdˇˇ({π †ó°ñ°dONLNd,S⁄_‡({¯7†ó°ñ°dONLNd._`kÀ(á~Automation Overview†ó°ñ°dONLNdˇˇ)m ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.........................°dONLNdˇˇ(áÍ †ó°ñ°dONLNdB_⁄k‡(á¯7†ó°ñ°dONLNdDk`wÃ(ì~SPEC S&L  Overview†ó°ñ°dONLNdˇˇ)m ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.........................°dONLNdˇˇ(ìÍ †ó°ñ°dONLNdWk⁄w‡(ì¯7†ó°ñ†ó°ñ
  2310. °dONLNdYÉæñ@(∞‹Part I – Execution†ó°ñ†ó°ñ
  2311. °dONLNdl°`≠ª(…~Setup & Execution†ó°ñ°dONLNdˇˇ)^ ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`..............................°dONLNdˇˇ(…Ÿ †ó°ñ°dONLNd~°⁄≠Ê(…¯10†ó°ñ°dONLNdÅ≠Ñπ¡(’¢ Target Setup†ó°ñ°dONLNdˇˇ)@ ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`............................°dONLNdˇˇ(’‡ †ó°ñ°dONLNdé≠⁄πÊ(’¯10†ó°ñ°dONLNdëπÑ≈ö(·¢Host†ó°ñ°dONLNdˇˇ) ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`    .........°dONLNdˇˇ(·π †ó°ñ°dONLNdñπ⁄≈Ê(·¯11†ó°ñ°dONLNdô≈Ñ—Á(Ì¢The Cloning Process†ó°ñ°dONLNdˇˇ)g ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`...............°dONLNdˇˇ(Ì †ó°ñ°dONLNd≠≈⁄—Ê)Ú11†ó°ñ†ó°ñ
  2312. °dONLNd∞›ØO(
  2313. ÕPart II – Development†ó°ñ†ó°ñ
  2314. °dONLNdΔ˚`≥(#~Scripts Overview†ó°ñ°dONLNdˇˇ)U ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.°dONLNdˇˇ(#“ †ó°ñ°dONLNd◊˚⁄Ê(#¯14†ó°ñ°dONLNd⁄ÑP(/¢%The Elements That Make Up A Quicklook†ó°ñ°dONLNdˇˇ)– ................................°dONLNdˇˇ)` ............°dONLNdˇˇ(/o †ó°ñ°dONLNd⁄Ê)â14†ó°ñ°dONLNdч(;¢Descriptive Header†ó°ñ°dONLNdˇˇ)^ ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`..................°dONLNdˇˇ(;ˇ †ó°ñ°dONLNd⁄Ê)˘15†ó°ñ°dONLNdÑ+Á(G¢Library Declarations†ó°ñ°dONLNdˇˇ)g ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`...............°dONLNdˇˇ(G †ó°ñ°dONLNd.⁄+Ê)Ú16†ó°ñ°dONLNd1+Ñ7(S¢Application Specific Tasks†ó°ñ°dONLNdˇˇ)Ö ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.....°dONLNdˇˇ(S$ †ó°ñ°dONLNdL+⁄7Ê)‘16†ó°ñ°dONLNdO7ÑC€(_¢Script Declaration†ó°ñ°dONLNdˇˇ)[ ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`...................°dONLNdˇˇ(_˙ †ó°ñ°dONLNdb7⁄CÊ)˛16†ó°ñ°dONLNdeCÑOÿ(k¢Body Of A Script†ó°ñ°dONLNdˇˇ)X ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`....................°dONLNdˇˇ(k˜ †ó°ñ°dONLNdvC⁄OÊ(k¯16†ó°ñ°dONLNdyOÑ[0(w¢"Scripts Included With This Package†ó°ñ°dONLNdˇˇ)Ø ................................°dONLNdˇˇ)`.......................°dONLNdˇˇ(wO †ó°ñ°dONLNdúO⁄[Ê)©18†ó°ñ°dONLNdü[`gΩ(É~Libraries Overview†ó°ñ°dONLNdˇˇ)a ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.............................°dONLNdˇˇ(É‹ †ó°ñ°dONLNd≤[⁄gÊ(ɯ19†ó°ñ°dONLNdµgÑs(è¢How To Use The Libraries†ó°ñ°dONLNdˇˇ)Ç ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`......°dONLNdˇˇ(è# †ó°ñ°dONLNdŒg⁄sÊ)’19†ó°ñ°dONLNd—sÑÌ(õ¢Library Task Benefits†ó°ñ°dONLNdˇˇ)j ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`..............°dONLNdˇˇ(õ  †ó°ñ°dONLNdÁs⁄Ê)Ì19†ó°ñ°dONLNdÍÑã8(ߢ#Adding To / Modifying The Libraries†ó°ñ°dONLNdˇˇ)∏ ................................°dONLNdˇˇ)`....................°dONLNdˇˇ(ßW †ó°ñ°dONLNd⁄ãÊ)°20†ó°ñ°dONLNdãÑó(≥¢Fixing A Bug In The Libraries†ó°ñ°dONLNdˇˇ)î ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ(≥5 †ó°ñ°dONLNd/ã⁄óÊ)√20†ó°ñ°dONLNd2óÑ£C(ø¢%Conventions Used For Task Definitions†ó°ñ°dONLNdˇˇ)¡ ................................°dONLNdˇˇ)`.................°dONLNdˇˇ(øa †ó°ñ°dONLNdXó⁄£Ê)ó20†ó°ñ°dONLNd[£`Øÿ(À~SPEC S&L Layer Model†ó°ñ°dONLNdˇˇ)y ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.....................°dONLNdˇˇ(Àˆ †ó°ñ°dONLNdp£⁄ØÊ(À¯21†ó°ñ°dONLNdsØ`ªÎ(◊~Exercising Window Features†ó°ñ°dONLNdˇˇ)é ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`..............°dONLNdˇˇ(◊     †ó°ñ°dONLNdéØ⁄ªÊ)Ô22†ó°ñ°dONLNdëªÑ«≥(„¢Overview†ó°ñ°dONLNdˇˇ)1 ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.°dONLNdˇˇ(„— †ó°ñ°dONLNdöª⁄«Ê(„¯22†ó°ñ°dONLNdù«Ñ”(Ô¢Calling The Window Tasks†ó°ñ°dONLNdˇˇ)Ö ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.....°dONLNdˇˇ(Ô& †ó°ñ°dONLNd∂«⁄”Ê)“22†ó°ñ°dONLNdπ”`fl(˚~#Performing Standard File Operations†ó°ñ°dONLNdˇˇ)µ ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.°dONLNdˇˇ(˚0 †ó°ñ°dONLNd›”⁄flÊ)»27†ó°ñ°dONLNd‡flÑÎ≥(¢Overview†ó°ñ°dONLNdˇˇ)1 ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.°dONLNdˇˇ(— †ó°ñ°dONLNdÈfl⁄ÎÊ(¯27†ó°ñ°dONLNdÏÎј'(¢!Calling The Standard File Library†ó°ñ°dONLNdˇˇ)¶ ................................°dONLNdˇˇ)`..........................°dONLNdˇˇ(E †ó°ñ°dONLNdÎ⁄˜Ê)≥27†ó°ñ°dONLNd˜`∞(~Exercising Fonts†ó°ñ°dONLNdˇˇ)R ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`..°dONLNdˇˇ(œ †ó°ñ°dONLNd"˜⁄Ê(¯31†ó°ñ°dONLNd%Ñ(+¢Font Related Global Variables†ó°ñ°dONLNdˇˇ)î ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ(+4 †ó°ñ°dONLNdC⁄Ê)ƒ31†ó°ñ°dONLNdFÑ≈(7¢ Test Methods†ó°ñ°dONLNdˇˇ)C ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`...........................°dONLNdˇˇ(7‰ †ó°ñ°dONLNdS⁄Ê(7¯32†ó°ñ°dONLNdV`'Î(C~Performing Draw Operations†ó°ñ°dONLNdˇˇ)é ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`..............°dONLNdˇˇ(C
  2315.  †ó°ñ°dONLNdq⁄'Ê)Ó33†ó°ñ°dONLNdt'Ñ3»(O¢Using Palettes†ó°ñ°dONLNdˇˇ)F ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`..........................°dONLNdˇˇ(OÁ †ó°ñ°dONLNdÉ'⁄3Ê(O¯33†ó°ñ°dONLNdÜ3Ñ?æ([¢ Using Tools†ó°ñ°dONLNdˇˇ)= ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.............................°dONLNdˇˇ([› †ó°ñ°dONLNdí3⁄?Ê([¯39†ó°ñ°dONLNdï?ÑK»(g¢
  2316. Using Objects†ó°ñ°dONLNdˇˇ)F ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`..........................°dONLNdˇˇ(gÊ †ó°ñ°dONLNd£?⁄KÊ(g¯43†ó°ñ°dONLNd¶KÑW(s¢Using The Draw Libraries†ó°ñ°dONLNdˇˇ) ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.......°dONLNdˇˇ(s  †ó°ñ°dONLNdøK⁄WÊ)ÿ47†ó°ñ°dONLNd¬W`cΩ(~Test Case Tracking†ó°ñ°dONLNdˇˇ)^ ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`..............................°dONLNdˇˇ(€ †ó°ñ°dONLNd’W⁄cÊ(¯51†ó°ñ°dONLNdÿcÑo≥(ã¢Overview†ó°ñ°dONLNdˇˇ)1 ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.°dONLNdˇˇ(ã— †ó°ñ°dONLNd·c⁄oÊ(ã¯51†ó°ñ°dONLNd‰oÑ{(ó¢How Test Case Tracking Works†ó°ñ°dONLNdˇˇ)ù ................................°dONLNdˇˇ)`.............................°dONLNdˇˇ(ó= †ó°ñ°dONLNdo⁄{Ê)ª51†ó°ñ°dONLNd{Ñá<(£¢$Calling The Test Case Tracking Tasks†ó°ñ°dONLNdˇˇ)ª ................................°dONLNdˇˇ)`...................°dONLNdˇˇ(£Z †ó°ñ°dONLNd){⁄áÊ)û53†ó°ñ°dONLNd,á`ì(Ø~!Appendix A - QuickLook Definition†ó°ñ°dONLNdˇˇ)≤ ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`..°dONLNdˇˇ(Ø. †ó°ñ°dONLNdNá⁄ìÊ) 56†ó°ñ°dONLNdQì`ü(ª~Appendix B - Sample QuickLook†ó°ñ°dONLNdˇˇ)£ ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.......°dONLNdˇˇ(ª  †ó°ñ°dONLNdoì⁄üÊ)ÿ57†óˇ6º◊#ˇ ˇˇˇˇ#◊°ñ 
  2317. _,Times
  2318. .ˇ°dONLNdˇˇ(⁄ZIV°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ
  2319. °dONLNd)Δ<](V‰Contents (continued)†ó°ñ†ó°ñ
  2320. °dONLNdG`SÏ(o~Appendix C - Sample Scripts†ó°ñ°dONLNdˇˇ)é ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`..............°dONLNdˇˇ(o  †ó°ñ°dONLNd1G⁄SÊ)Ì62†ó°ñ°dONLNd4S`_({~!Appendix D - Library Dependencies†ó°ñ°dONLNdˇˇ)≤ ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`..°dONLNdˇˇ({- †ó°ñ°dONLNdVS⁄_Ê)À63†ó°ñ°dONLNdY_`k(á~#Appendix E - Tasks within Libraries†ó°ñ°dONLNdˇˇ)≤ ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`..°dONLNdˇˇ(á. †ó°ñ°dONLNd}_⁄kÊ) 65†ó°ñ°dONLNdÄkÑwΩ(ì¢
  2321. Custom.Lib†ó°ñ°dONLNdˇˇ): ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`..............................°dONLNdˇˇ(쀠†ó°ñ°dONLNdãk⁄wÊ(ì¯65†ó°ñ°dONLNdéwÑÉ®(ü¢DA.Lib†ó°ñ°dONLNdˇˇ)( ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`....°dONLNdˇˇ(ü« †ó°ñ°dONLNdïw⁄ÉÊ(ü¯65†ó°ñ°dONLNdòÉÑè¬(´¢ DoTasks.Lib†ó°ñ°dONLNdˇˇ)@ ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`............................°dONLNdˇˇ(´‡ †ó°ñ°dONLNd§É⁄èÊ(´¯65†ó°ñ°dONLNdßèÑõ≤(∑¢Draw.Lib†ó°ñ°dONLNdˇˇ)1 ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.°dONLNdˇˇ(∑– †ó°ñ°dONLNd∞è⁄õÊ(∑¯65†ó°ñ°dONLNd≥õÑß¿(√¢ FileTool.Lib†ó°ñ°dONLNdˇˇ)@ ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`............................°dONLNdˇˇ(√fl †ó°ñ°dONLNd¿õ⁄ßÊ(√¯65†ó°ñ°dONLNd√ßÑ≥∂(œ¢
  2322. Finder.Lib†ó°ñ°dONLNdˇˇ)4 ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ(œ’ †ó°ñ°dONLNdŒß⁄≥Ê(œ¯65†ó°ñ°dONLNd—≥Ñø≠(€¢Font.Lib†ó°ñ°dONLNdˇˇ)+ ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`...°dONLNdˇˇ(€Ã †ó°ñ°dONLNd⁄≥⁄øÊ(€¯66†ó°ñ°dONLNd›øÑÀ«(Á¢ Geometry.Lib†ó°ñ°dONLNdˇˇ)F ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`..........................°dONLNdˇˇ(ÁÊ †ó°ñ°dONLNdÍø⁄ÀÊ(Á¯66†ó°ñ°dONLNdÌÀÑ◊π(Û¢ Gestalt.Lib†ó°ñ°dONLNdˇˇ)7 ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`...............................°dONLNdˇˇ(Ûÿ †ó°ñ°dONLNd˘À⁄◊Ê(Û¯66†ó°ñ°dONLNd¸◊Ñ„º(ˇ¢ Globals.Lib†ó°ñ°dONLNdˇˇ): ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`..............................°dONLNdˇˇ(ˇ€ †ó°ñ°dONLNd◊⁄„Ê(ˇ¯66†ó°ñ°dONLNd „ÑÔ–( ¢LaunchQuit.Lib†ó°ñ°dONLNdˇˇ)O ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.......................°dONLNdˇˇ( Ô †ó°ñ°dONLNd„⁄ÔÊ( ¯67†ó°ñ°dONLNdÔÑ˚œ(¢MathTool.vulib†ó°ñ°dONLNdˇˇ)O ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.......................°dONLNdˇˇ(Ó †ó°ñ°dONLNd,Ô⁄˚Ê(¯67†ó°ñ°dONLNd/˚ÑØ(#¢Misc.Lib†ó°ñ°dONLNdˇˇ). ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`..°dONLNdˇˇ(#Œ †ó°ñ°dONLNd8˚⁄Ê(#¯67†ó°ñ°dONLNd;Ñ≈(/¢ OnTarget.Lib†ó°ñ°dONLNdˇˇ)C ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`...........................°dONLNdˇˇ(/‰ †ó°ñ°dONLNdH⁄Ê(/¯67†ó°ñ°dONLNdKÑπ(;¢
  2323. OutPut.Lib†ó°ñ°dONLNdˇˇ)7 ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`...............................°dONLNdˇˇ(;ÿ †ó°ñ°dONLNdV⁄Ê(;¯67†ó°ñ°dONLNdYÑ+∏(G¢ Palette.Lib†ó°ñ°dONLNdˇˇ)7 ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`...............................°dONLNdˇˇ(G÷ †ó°ñ°dONLNde⁄+Ê(G¯67†ó°ñ°dONLNdh+Ñ7Æ(S¢    Print.Lib†ó°ñ°dONLNdˇˇ). ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`..°dONLNdˇˇ(SÕ †ó°ñ°dONLNdr+⁄7Ê(S¯67†ó°ñ°dONLNdu7ÑC¥(_¢
  2324. Select.Lib†ó°ñ°dONLNdˇˇ)4 ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ(_” †ó°ñ°dONLNdÄ7⁄CÊ(_¯68†ó°ñ°dONLNdÉCÑO‘(k¢StandardFile.Lib†ó°ñ°dONLNdˇˇ)R ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`......................°dONLNdˇˇ(kÛ †ó°ñ°dONLNdîC⁄OÊ(k¯68†ó°ñ°dONLNdóOÑ[¥(w¢
  2325. String.Lib†ó°ñ°dONLNdˇˇ)4 ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ(w” †ó°ñ°dONLNd¢O⁄[Ê(w¯68†ó°ñ°dONLNd•[Ñg’(É¢TargetCheck.Lib†ó°ñ°dONLNdˇˇ)U ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.....................°dONLNdˇˇ(ÉÙ †ó°ñ°dONLNdµ[⁄gÊ(ɯ68†ó°ñ°dONLNd∏gÑs≠(è¢TCS.Lib†ó°ñ°dONLNdˇˇ)+ ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`...°dONLNdˇˇ(èà†ó°ñ°dONLNd¿g⁄sÊ(è¯68†ó°ñ°dONLNd√sÑ≠(õ¢Text.Lib†ó°ñ°dONLNdˇˇ)+ ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`...°dONLNdˇˇ(õà†ó°ñ°dONLNdÃs⁄Ê(õ¯68†ó°ñ°dONLNdœÑãÿ(ߢUserInterface.Lib†ó°ñ°dONLNdˇˇ)X ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`....................°dONLNdˇˇ(ߘ †ó°ñ°dONLNd·⁄ãÊ(߯69†ó°ñ°dONLNd‰ãÑó∂(≥¢ Utility.Lib†ó°ñ°dONLNdˇˇ)4 ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ(≥’ †ó°ñ°dONLNdã⁄óÊ(≥¯69†ó°ñ°dONLNdÛóÑ£·(ø¢WordProcessor.Lib†ó°ñ°dONLNdˇˇ)a ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.................°dONLNdˇˇ(ø †ó°ñ°dONLNdó⁄£Ê)¯69†ó°ñ°dONLNd£`ØK(À~/Appendix F - Task Listing Sorted Alphabetically†ó°ñ°dONLNdˇˇ)Ó ................................°dONLNdˇˇ)`..............°dONLNdˇˇ(Ài †ó°ñ°dONLNd8£⁄ØÊ)è70†ó°ñ°dONLNd;Ø`ª5(◊~)Appendix G - Global Variables & Constants†ó°ñ°dONLNdˇˇ)÷ ................................°dONLNdˇˇ)`......................°dONLNdˇˇ(◊S †ó°ñ°dONLNdeØ⁄ªÊ)•76†ó°ñ°dONLNdhªÑ«'(„¢#Initialized In The Initglobals Task†ó°ñ°dONLNdˇˇ)¶ ................................°dONLNdˇˇ)`..........................°dONLNdˇˇ(„F †ó°ñ°dONLNdåª⁄«Ê)≤76†ó°ñ°dONLNdè«Ñ”(Ô¢Controlling The Test Level†ó°ñ°dONLNdˇˇ)Ö ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.....°dONLNdˇˇ(Ô% †ó°ñ°dONLNd™«⁄”Ê)”85†ó°ñ°dONLNd≠”Ñfl(˚¢ Initialized In The Initdraw Task†ó°ñ°dONLNdˇˇ)ö ................................°dONLNdˇˇ)`..............................°dONLNdˇˇ(˚; †ó°ñ°dONLNdŒ”⁄flÊ)Ω87†ó°ñ°dONLNd—flÑÎ(¢!Initialized In The Initfonts Task†ó°ñ°dONLNdˇˇ)ö ................................°dONLNdˇˇ)`..............................°dONLNdˇˇ(; †ó°ñ°dONLNdÛfl⁄ÎÊ)Ω91†ó°ñ°dONLNdˆÎј?(¢&Initialized In The Initrandomseed Task†ó°ñ°dONLNdˇˇ)æ ................................°dONLNdˇˇ)`..................°dONLNdˇˇ(] †ó°ñ°dONLNdÎ⁄˜Ê)õ94†ó°ñ°dONLNd ˜Ñ2(¢!Undefined Task References - Hooks†ó°ñ°dONLNdˇˇ)≤ ................................°dONLNdˇˇ)`......................°dONLNdˇˇ(Q †ó°ñ°dONLNdB˜⁄Ê)ß95†ó°ñ°dONLNdE`(+~#Appendix H - Test Cases in SPEC S&L†ó°ñ°dONLNdˇˇ)¡ ................................°dONLNdˇˇ)`.............................°dONLNdˇˇ(+= †ó°ñ°dONLNdi⁄Ê)ª99†ó°ñ°dONLNdl`›(7~Appendix I - Utility Tools†ó°ñ°dONLNdˇˇ) ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`...................°dONLNdˇˇ(7¸ †ó°ñ°dONLNdá⁄Ï)¸101†ó°ñ°dONLNdãÑ'ª(C¢    MouseTrap†ó°ñ°dONLNdˇˇ): ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`..............................°dONLNdˇˇ(CŸ †ó°ñ°dONLNdï⁄'Ï(C¯101†ó°ñ°dONLNdô'Ñ3≤(O¢    vuCollect†ó°ñ°dONLNdˇˇ)1 ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.°dONLNdˇˇ(O— †ó°ñ°dONLNd£'⁄3Ï(O¯101†ó°ñ°dONLNdß3Ñ?»([¢ MiniLauncher†ó°ñ°dONLNdˇˇ)F ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`..........................°dONLNdˇˇ([Á †ó°ñ°dONLNd¥3⁄?Ï([¯101†ó°ñ°dONLNd∏?ÑK±(g¢OnTarget†ó°ñ°dONLNdˇˇ)1 ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)` ................................°dONLNdˇˇ)`.°dONLNdˇˇ(g– †ó°ñ°dONLNd¡?⁄KÏ(g¯101†óˇÇ◊#ˇ ˇˇˇˇ#◊°ñ 
  2326. _,Times
  2327. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄V†ó°ñ,     Helvetica
  2328. °dONLNd6<H⁄(cZAcknowledgments TXT
  2329.  gXg
  2330. †ó°ñ†ó°ñ
  2331. °dONLNdV<b⁄*XThis document is the result of fruitful work from several individuals that deserve to be†ó°ñ°dONLNdib<nfi* Rmentioned, even though some of them have moved on to other challenges at Apple and†ó°ñ°dONLNdºn<zÿ* Vare no longer working closely with us. We want to thank them for the excellent effort,†ó°ñ°dONLNdz<Ü≥* support and cooperation:†ó°ñ†ó°ñ°dONLNd,í<ûñ*Key Contributor:†ó°ñ†ó°ñ°dONLNd=™<∂Â*TDave Matzner, Michael Leong, Gil Spencer, Ken Landreth, Jeff Mitchell, Nick Vaccaro,†ó°ñ°dONLNdí∂<¬v* Eric Hewitt.†ó°ñ†ó°ñ°dONLNdüŒ<⁄§*Other Contributors:†ó°ñ†ó°ñ°dONLNd≥Ê<Úfi*VJohn Coelho, Mikel De Sanctis, Jay Jessen, John Harrison, Kristi Kokalis, Naga, Stuart†ó°ñ°dONLNd
  2332. Ú<˛ã* ERussell, Nancy Schorr, Carol Wilser and the entire Virtual User team.†ó°ñ†óˇ˙◊#ˇ ˇˇˇˇ#◊°ñ 
  2333. _,Times
  2334. .ˇ°dONLNdˇˇ(⁄Z6°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ,     Helvetica
  2335. °dONLNd6<Hˆ(cZAbout This Document TXT
  2336.  gXg
  2337. †ó°ñ†ó°ñ
  2338. °dONLNdV<b„*XSPEC S&L is a collection of Virtual User scripts and libraries developed to expedite the†ó°ñ°dONLNdmb<nÍ* XMacintosh application and system software compatibility test process. This document is a†ó°ñ°dONLNdΔn<z€* Tuser's guide for people who intend to utilize SPEC S&L. The document is divided into†ó°ñ°dONLNdz<ÜÕ* Vtwo parts. Part I addresses the execution of scripts, intended for individuals running†ó°ñ°dONLNdrÜ<í—* Oscripts within the SPEC S&L framework. We have attempted to include many of the†ó°ñ°dONLNd¬í<û„* Zissues that can arise when setting up and running an automated test lab. Part II describes†ó°ñ°dONLNdû<™‰* Ythe SPEC S&L libraries in specific detail,  intended primarily for individuals developing†ó°ñ°dONLNdw™<∂‹* Rnew scripts and libraries within the SPEC S&L framework. This document will evolve†ó°ñ°dONLNd ∂<¬Œ* Sover time, to address most of the issues that arise as people begin using SPEC S&L.†ó°ñ†ó°ñ†óˇ¢◊#ˇ ˇˇˇˇ#◊°ñ 
  2339. _,Times
  2340. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄7†ó°ñ,     Helvetica
  2341. °dONLNd6<H§(cZ Introduction TXT
  2342.  gXg
  2343. †ó°ñ†ó°ñ
  2344. °dONLNd
  2345. d<sÀ*+Automation Overview†ó°ñ
  2346. °dONLNd!r<~’* VVirtual User is a user-level automation system designed for the purpose of testing the†ó°ñ°dONLNdx~<äÁ* Xelements of the Macintosh human interface. If you are not familiar with Virtual User you†ó°ñ°dONLNd—ä<ñë* may want to read vİdONLNd‚äíñJ)V%Setting Up and Running Virtual User  p¿°dONLNdäKñl)πand/or °dONLNdämñ‹)"Virtual User Language†ó°ñ°dONLNd$ñ<¢å(æZReference Guide…°dONLNd3ñå¢Ã)PE. By utilizing Virtual User to automatically exercise features of the†ó°ñ°dONLNdy¢<Ʊ( ZPhuman interface, test suites can be developed that will verify various levels of†ó°ñ°dONLNd Æ<∫„* Yfunctionality. Test suites once developed will provide numerous benefits. Below is a list†ó°ñ°dONLNd$∫<ΔT* :of some of the benefits provided by the use of automation.†ó°ñ†ó°ñ°dONLNd_“Ñfi≠+HBenefits–İdONLNdg“≠fi∞)):†ó°ñ°dONLNdifiÑÍË(¢- Reusable test suites†ó°ñ°dONLNdÄÍш* - Repeatable test execution†ó°ñ°dONLNdúˆÑ[* -- Multiple configurations tested concurrently†ó°ñ°dONLNd Ñ˙* - Automate tedious tasks†ó°ñ°dONLNd‰Ñ* - Benchmark performance†ó°ñ°dONLNd˝Ñ&N* *- Integration with environmental variables†ó°ñ†ó°ñ
  2347. °dONLNd(8<G°(bZ S&L  Overview†ó°ñ
  2348. °dONLNd7F<RË* ZSPEC S&L is a collection of Virtual User (VU) libraries and scripts that will help quality†ó°ñ°dONLNdíR<^œ* Uengineers verify compatibility with third party products. Automated testing utilizing†ó°ñ°dONLNdË^<jÈ* YVirtual User has provided a means for limiting the amount of resources required to verify†ó°ñ°dONLNdBj<v‰* Vsoftware compatibility with third party products. SPEC S&L  addresses the need to have†ó°ñ°dONLNdôv<Çfi* Ta single framework for developing Virtual User automated test scripts. SPEC S&L will†ó°ñ°dONLNdÓÇ<éª* Phelp software engineers by performing the repetitive tasks involved in verifying†ó°ñ°dONLNd?é<öº* compatibility in two ways:†ó°ñ†ó°ñ°dONLNd[¶Ñ≤“+HG1) Providing a collection of  compatibility tests for many of the major†ó°ñ°dONLNd£≤ëæÑ+
  2349. 4third party applications existing for the Macintosh.†ó°ñ°dONLNdÿæÑ Ê(Ê¢H2)  Providing an extendible script development framework for groups that†ó°ñ°dONLNd! ë÷≤+
  2350. >are interested in automating additional compatibility testing.†ó°ñ†ó°ñ°dONLNdaÂ<Òº(
  2351. ZOSPEC S&L contains two distinct elements: Scripts and Libraries. Libraries are a†ó°ñ°dONLNd±Ò<˝€* Tcollection of commonly used tasks. By placing commonly used tasks  into libraries we†ó°ñ°dONLNd˝<    ±* gain several advantages:†ó°ñ†ó°ñ°dONLNd`!l+$1) ~@°dONLNd"m!õ)
  2352. Reusable&¿°dONLNd*ú!Â)/ VU code base.†ó°ñ°dONLNd9!`-l(I~2) ~@°dONLNd<!m-î)
  2353. Smallerz@°dONLNdC!ï-)( more efficient scripts.†ó°ñ°dONLNd\-`9l(U~3) ~@°dONLNd_-m9™)
  2354. Consistencyœ¿°dONLNdj-™9Δ)=: - Testing common features between applications in similar†ó°ñ°dONLNd•9rEò(aêmanner.†ó°ñ°dONLNd≠E`Ql(m~4) ~@°dONLNd∞EmQº)
  2355. Maintainability}°dONLNdøEΩQÀ)P9 - Handle changes in central location instead of updating†ó°ñ°dONLNd˘Qr]ª(yênumerous files.†ó°ñ°dONLNd    ]`il(Ö~5) ~@°dONLNd ]mi†)
  2356. Flexibility{¿°dONLNd]°iË)4I -  Ability to override default routines, if application features require†ó°ñ°dONLNdairu{(ëêit.†ó°ñ°dONLNdeu`Ål(ù~6) ~@°dONLNdhumÅØ)
  2357.  
  2358. Extendibility(İdONLNduu∞ʼn)CF - It is easy to extend any of the data structures in the libraries to†ó°ñ°dONLNdºÅrç∫(©êGhandle additional features, and since everything that is specific to an†óˇ ◊#ˇ ˇˇˇˇ#◊°ñ 
  2359. _,Times
  2360. .ˇ°dONLNdˇˇ(⁄Z8°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)r5À(QêLapplication is contained within one script file it is easy to add additional†ó°ñ°dONLNdM5rAu* :features to the test suite without affecting other suites.†ó°ñ†ó°ñ†ó°ñ°dONLNdàY<eÃ(ÅZSSPEC S&L scripts are made up of several elements including: calls to library tasks,†ó°ñ°dONLNd‹e<q…* Vapplication specific data structures, application specific tasks. By limiting what the†ó°ñ°dONLNd3q<}‡* Xscripts contain, we have set a standard for limiting code redundancy. Since the majority†ó°ñ°dONLNdå}<â·* \of the testing is controlled from the same set of libraries, testing between applications is†ó°ñ°dONLNdÈâ<ï„* Yvery consistent. The application data structures mentioned above are discussed in Part II†ó°ñ°dONLNdCï<°fl* Wof this document. For more information on Scripts refer to the section titled QuickLook†ó°ñ°dONLNdõ°<≠j*
  2361. Scripting.†ó°ñ†ó°ñ,     Helvetica
  2362. °dONLNd¶ø<Œß* Important Notes†ó°ñ
  2363. °dONLNd∂Õ<Ÿœ* R- Some applications require serial numbers, or have a copy protection mechanism to†ó°ñ°dONLNd    Ÿ<ƒ* Pprevent multiple copies running simultaneously. When executing scripts for those†ó°ñ°dONLNdZÂ<Ò‰* \application for more than one target, only the first copy of the application will be able to†ó°ñ°dONLNd∑Ò<˝Õ* Xlaunch, all the others will get an error. The scripts for those applications are: 4D.vu,†ó°ñ°dONLNd˝<    ≈* LCanvas.vu, Mathematica.vu, and QuarkXpress.vu, PhotoShop.vu and Director.vu.†ó°ñ†ó°ñ†ó°ñ†óˇƒ◊#ˇ ˇˇˇˇ#◊°ñ 
  2364. _,Times
  2365. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄9†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ
  2366. $°dONLNd=ëaï(wØPart I – Execution†óˇ◊#ˇ ˇˇˇˇ#◊°ñ 
  2367. _,Times
  2368. .ˇ°dONLNdˇˇ(⁄Z10°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ,     Helvetica
  2369. °dONLNd6<H⁄(cZSetup & Execution TXT
  2370.  gXg
  2371. †ó°ñ†ó°ñ
  2372. °dONLNdV<b›*WThe initial setup required to run a Virtual User automation suite can vary depending on†ó°ñ°dONLNdjb<nË* [the specifics of the test suite. This section describes the setup required to use SPEC S&L.†ó°ñ°dONLNdΔn<zΔ* RThe following instructions assume that VU is installed according to the guidelines†ó°ñ°dONLNdz<Ü{* presented in '˜@°dONLNd'z{Ü0)?$Setting Up and Running Virtual User'ÇİdONLNdKz1Ü4)∂.†ó°ñ†ó°ñ
  2373. °dONLNdMö<©ë(ƒZ Target Setup†ó°ñ
  2374. °dONLNdZ®`¥Á+$ W1)  Install all applications to be tested on target hard drive. See section titled "The†ó°ñ°dONLNd≤¥r¿0+ &Cloning Process" for more information.†ó°ñ†ó°ñ°dONLNdŸÃ`ÿ(Ù~%2)  Install the 'Agent VU' Extension.†ó°ñ†ó°ñ°dONLNdˇ‰`‹*M3)  Name each target in the 'Machine Name' field of the 'Sharing Setup' CDEV.†ó°ñ°dONLNdMѸ†+$ ?• This is done so that the target can be identified on the net.†ó°ñ°dONLNdç¸ÑÀ* H• It is necessary to reboot all targets after naming so that they can be†ó°ñ°dONLNd÷ç
  2375. +     registered on the network.†ó°ñ†ó°ñ°dONLNdÒ `,Ö(H~:4)  Set the Key Repeat Rate to OFF in the 'Keyboard' CDEV.†ó°ñ°dONLNd,,Ñ8 +$ H•  This is done so that typing will be accurate, and letters will not be†ó°ñ°dONLNdu8çD¿+     ?unexpectedly repeated (This will cause error with our launching†ó°ñ°dONLNdµDçP∑* scheme).†ó°ñ†ó°ñ°dONLNdæ\`h((Ñ~-5)  Select a printer driver in the 'Chooser'.†ó°ñ°dONLNdÏhÑtfi+$ I• This is done because many applications require a printer to be selected†ó°ñ°dONLNd6tçÄ.+      prior to opening a new document.†ó°ñ†ó°ñ°dONLNdWådòfi(¥ÇQ6)  Insure that a copy of the VU external tool, OnTarget in located on all target†ó°ñ°dONLNd©òr§¢+     machines.†ó°ñ°dONLNd¥§Ñ∞È+ O• OnTarget is used to preflight all targets to insure that scripts can run on a†ó°ñ°dONLNd∞çºM+     &given configuration (see gLaunchReqs).†ó°ñ°dONLNd+ºÑ»Œ(‰¢E• To access OnTarget (or any other external tool) you must select the†ó°ñ°dONLNdq»ç‘Ü+     /Sharing Setup CDEV and turn on Program Linking.†ó°ñ°dONLNd¢‘ч‹(¸¢C• To allow guest access: Open the Users & Groups CDEV, double-click†ó°ñ°dONLNdʇçÏŸ+     Fon the <Guest> icon, and select the check box titled  'Allow guests to†ó°ñ°dONLNd-Ï篥* >link to programs on this Macintosh' (see Host Setup for detail†ó°ñ°dONLNdl¯ç* concerning AutoGuest).†ó°ñ†ó°ñ°dONLNdÖ`E(8~/7)  Configure each target's system environment.†ó°ñ°dONLNd∂Ñ(Ë+$ J•  All software/hardware configurable system variables should be set prior†ó°ñ°dONLNd(ç4‚+     Mto executing a test suite. For instance: if your test suite requires that the†ó°ñ°dONLNdO4ç@¡* Ctest be run in 32 bit addressing mode, it is important to place the†ó°ñ°dONLNdì@çLÃ* Cmachine in this state (either manually or automatically - by way of†ó°ñ°dONLNd◊LçX,* $script) prior to executing the test.†ó°ñ†ó°ñ°dONLNd˝dÑp“(å¢G•  Ensure the first element of the Scrapbook contains text. This can be†ó°ñ°dONLNdEpç|‡+     Eaccomplished by using any word processor to type the desired text and†ó°ñ°dONLNdã|çà* paste it onto the Scrapbook.†óˇÄ◊#ˇ ˇˇˇˇ#◊°ñ 
  2376. _,Times
  2377. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛11†ó°ñ°dONLNd)`5æ(Q~8) Launching Setup†ó°ñ°dONLNd5ÑAfi+$ L•  In order for the libraries to launch the intended application each of the†ó°ñ°dONLNd`AçM›+     Japplication scripts references a global variable in the Globals.lib titled†ó°ñ°dONLNd´MçYÁ* JgAliasDirectory. This global variable is the name of a directory (or alias†ó°ñ°dONLNdˆYçe‹* Fto a directory) in the Apple Menu, which contains the applications (or†ó°ñ°dONLNd=eçqÏ* application aliases).†ó°ñ†ó°ñ°dONLNdT}çâ* To use the existing system:†ó°ñ°dONLNdqâçïƒ* A1) Create and name a folder on the target hard disk: for example:†ó°ñ°dONLNd≥ïö°Œ+
  2378. D'#Aliases''. This is the default name that is assigned to the global†ó°ñ°dONLNd¯°ö≠‰* AliasDirectory.†ó°ñ°dONLNd≠çπΩ(’´B2) Place an alias to this folder in the 'Apple Menu Items' folder.†ó°ñ°dONLNdKπç≈†* >3) Place aliases to all applications in the '#Aliases' folder.†ó°ñ†ó°ñ°dONLNdä—ç›´*Note: y¿°dONLNdê—¨›È)FThe '#' sign precedes the name 'Aliases' so that it will be at the top†ó°ñ°dONLNd◊›çÈ(´2of the Apple Menu, which is sorted alphabetically.†ó°ñ†ó°ñ°dONLNd
  2379. ıç–*GAn alternative method is to place the application (or its alias) in the†ó°ñ°dONLNdRç
  2380. Û* Apple Menu directly.†ó°ñ†ó°ñ†ó°ñ,     Helvetica
  2381. °dONLNdg+<:[(UZHost†ó°ñ
  2382. °dONLNdl9<EÊ* WSPEC S&L requires Virtual User 2.0x, but does not require any unique setup for the host†ó°ñ°dONLNdƒE<Q≈* Qmachine except for installing the AutoGuest extension (see below), and allocating†ó°ñ°dONLNdQ<]‚* Senough memory to the Virtual User application via the Get Info box. When using SPEC†ó°ñ°dONLNdj]<ie* :S&L, 4 MB or more is recommended for V.U. Please refer to  @°dONLNd§]fiŸ(ÖÑSetting Up and Running†ó°ñ°dONLNdªi<u~(ëZVirtual User  “İdONLNd…i~uü)Band/or y¿°dONLNd–i†ub)"%Virtual User Language Reference GuideİdONLNdıicuf)√.†ó°ñ†ó°ñ°dONLNd¯Å`çÍ(©~1)  Install the AutoGuest Init†ó°ñ°dONLNdçÑô÷+$ J• This is done so that the host will be able to automatically log onto all†ó°ñ°dONLNdbôç•“+     Ctargets when making calls to external tools. AutoGuest allows guest†ó°ñ°dONLNd¶•ç±–* Aaccess Program Linking to occur without any confirmation dialogs.†ó°ñ†ó°ñ
  2383. °dONLNdË√<“«(ÌZThe Cloning Process†ó°ñ
  2384. °dONLNd¸—<›À* VKeeping current versions of third party software on all target machines is critical to†ó°ñ°dONLNdS›<È€* Umaintaining compatibility information. Cloning hard drives is a method used to update†ó°ñ°dONLNd©È<ıœ* Tnumerous target hard drives concurrently. The cloning process entails establishing a†ó°ñ°dONLNd˛ı<œ* Wsingle hard drive, the 'Clone Master' with the latest version of each application to be†ó°ñ°dONLNdV<
  2385. Æ* Mtested. The Clone Master then needs to be copied to each of the target CPU's.†ó°ñ°dONLNd•
  2386. <⁄* WThe section that follows details the steps to be taken when setting up the Clone Master†ó°ñ°dONLNd˝<%Å* and cloning it:†ó°ñ†ó°ñ°dONLNd
  2387. 1<=Ÿ*Y1)  Copy all of the applications (and appropriate files) to be tested to the Clone Master†ó°ñ°dONLNdg=<Io* hard drive.†ó°ñ†ó°ñ°dONLNdsU`aw+$Note{İdONLNdwUxa“)H: Normally only files which are required are copied to the Clone Master.†ó°ñ°dONLNd¿a`mfl(â~SGenerally there are a lot of extraneous files in product packages,  these files can†ó°ñ°dONLNd    m`y* &usually be removed to free disk space.†ó°ñ†ó°ñ°dONLNd    <Ö`ë(**We have distinguished four types of files:†óˇ¬◊#ˇ ˇˇˇˇ#◊°ñ 
  2388. _,Times
  2389. .ˇ°dONLNdˇˇ(⁄Z12°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)`5h(Q~9-  Files which are required for the application to launch†ó°ñ°dONLNd;5`A{* =-  Files which are not required but test system functionality†ó°ñ°dONLNdzA`Mj* 8-  Files which are not required and therefore extraneous†ó°ñ°dONLNd¥M`Yƒ* -  Sample documents†ó°ñ†ó°ñ°dONLNd»e<q⁄(çZW2)  After Clone Master has been updated, aliases to each of the applications need to be†ó°ñ°dONLNd qN}Á+ Zcreated. Place all aliases in a single folder (#Aliases), these will be used to launch the†ó°ñ°dONLNd{}Nâä*
  2390. applications.†ó°ñ†ó°ñ°dONLNdäï`°w+Note{İdONLNdéïx°Ë)O: Remember that the state of the Clone Master will directly effect the state of†ó°ñ°dONLNdfi°`≠◊(…~Oall hard drives cloned from it. Make sure that everything is set up the way you†ó°ñ°dONLNd.≠`πÀ* Lintend, otherwise a long and tedious process of manually updating all target†ó°ñ°dONLNd{π`≈◊* Ndrives may be necessary. The best way to test that your Clone Master is set up†ó°ñ°dONLNd ≈`—Ë* Vproperly is to run a full series of scripts against the Clone Master. This will insure†ó°ñ°dONLNd!—`›á* Bthat all of the required files are available for each application.†ó°ñ†ó°ñ°dONLNdfÈ`ıó*A1) Double-click each alias to make sure the application launches.†ó°ñ°dONLNd®ırâ+ Note{İdONLNd¨ıä‘)G:  If an alias is made on the Clone Master the alias will not work on a†ó°ñ°dONLNdÙr
  2391. ⁄()êKdrive that was directly copied from the Clone Master unless it is named the†ó°ñ°dONLNd@
  2392. rç* same.†ó°ñ°dONLNdF`%Ÿ(A~P2)  If an application has a special registration screen, such as Name, Password,†ó°ñ°dONLNdó%r1Ÿ+ Metc. enter in the information necessary to dismiss this screen. (Applications†ó°ñ°dONLNdÂ1r=û* @that require unique serial numbers are a royal pain in the neck)†ó°ñ°dONLNd&=`I>(e~13) Check to insure that all required tools exist.†ó°ñ°dONLNdXIÑU‚+$ C- Macsbug, and Debugger Prefs, Agent VU, Programmer's Key, ResEdit,†ó°ñ°dONLNdúUÑaî* etc.†ó°ñ°dONLNd°a`m&(â~,4) Check to insure all required files exist.†ó°ñ°dONLNd–mÑy…+$ - Sample Files†ó°ñ°dONLNdflyÑÖ÷* K- Files needed for script execution, e.g. If Spell Checking is tested, is a†ó°ñ°dONLNd+ÖçëÊ+     dictionary present.†ó°ñ°dONLNdAëÑù(π¢ - Files necessary for launching.†ó°ñ†ó°ñ°dONLNdb©<µÁ(—Z[3)  The final step of the clone process is to copy Clone Master to each target drive. There†ó°ñ°dONLNdæµN¡°+ Eare two methods we normally use for cloning and/or updating drive(s).†ó°ñ°dONLNd¡`Õµ+ A)  Finder Copy -†ó°ñ°dONLNdÕÑŸà+$ 51) Mount the Clone Master and the drive to be cloned.†ó°ñ°dONLNdPŸÑÂS* +2) Erased/ Reformat the drive to be cloned.†ó°ñ°dONLNd|ÂÑÒÁ* L3) Select all the files on the Clone Master and drag them to the drive to be†ó°ñ°dONLNd…Òë˝≥+
  2393. cloned.†ó°ñ°dONLNd—˝`    À(%~LNote:  The names should be the same in order for the aliases to be resolved.†ó°ñ†ó°ñ°dONLNd`!*"B) GraceLAN - Update Manager tool.†óˇ»◊#ˇ ˇˇˇˇ#◊°ñ 
  2394. _,Times
  2395. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛13†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ
  2396. $°dONLNd=sa≥(wëPart II – Development†óˇ F◊#ˇ ˇˇˇˇ#◊°ñ 
  2397. _,Times
  2398. .ˇ°dONLNdˇˇ(⁄Z14°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ,     Helvetica
  2399. °dONLNd6<H”(cZ Scripts Overview TXT
  2400.  gXg
  2401. †ó°ñ†ó°ñ
  2402. °dONLNdV<b‹*WThe scripts provided in this product are meant to serve as examples of developing tests†ó°ñ°dONLNdjb<n‰* [based on the included libraries. All the scripts fall under the category of QuickLook test.†ó°ñ°dONLNdΔn<z„* [The term QuickLook is used to define a set of tests that exercise a limited set of features†ó°ñ°dONLNd"z<܇* Uof a given software product. In the context of SPEC S&L, the term QuickLook refers to†ó°ñ°dONLNdxÜ<í‚* ^a script that tests a limited set of features of a given third party application. The features†ó°ñ°dONLNd◊í<ûµ* Mthat are tested in a QuickLook are generally features that are common between†ó°ñ°dONLNd%û<™≈* Sapplications, such as: saving/opening files, resizing and closing windows, etc. For†ó°ñ°dONLNdy™<∂—* Uspecific details concerning the features exercised within a QuickLook please refer to†ó°ñ°dONLNdœ∂<¬–* SAppendix A: QuickLook definition. In this section we will be discussing the various†ó°ñ°dONLNd#¬<Œr* @elements that make up an application QuickLook script in detail.†ó°ñ†ó°ñ
  2403. °dONLNde‡<ÔK* %The Elements That Make Up A Quicklook†ó°ñ
  2404. °dONLNdãÓ@˙…+ QThis section describes guidelines concerning various elements within the standard†ó°ñ°dONLNd›˙@ƒ* JSPEC S&L QuickLook script.  Please refer to Appendix A: Standard QuickLook†ó°ñ°dONLNd(@µ* MDefinition  for information concerning the features tested in a QuickLook and†ó°ñ°dONLNdv@π* GAppendix B: Sample QuickLook for specific examples concerning QuickLook†ó°ñ°dONLNdæ@*é* implementation.†ó°ñ†ó°ñ°dONLNd–6NB™+FThere are five basic elements that make up a standard SPEC S&L script.†ó°ñ°dONLNdBNN∑* 1) Descriptive Header†ó°ñ°dONLNd.NNZæ* 2) Library Declarations†ó°ñ°dONLNdFZNf* (3) Application Specific Task Definitions†ó°ñ°dONLNdofNr≤* 4) Script Declaration†ó°ñ°dONLNdÖrN~π* 5) Body Of The Script†ó°ñ†ó°ñ°dONLNdõä<ñä(≤ZF In the following section we examine each of these elements in detail.†ó°ñ†óˇ
  2405. ¬◊#ˇ ˇˇˇˇ#◊°ñ 
  2406. _,Times
  2407. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛15†ó°ñ,     Helvetica
  2408. °dONLNd/<>∫(YZDescriptive Header†ó°ñ
  2409. °dONLNd=<I·* XThe descriptive header is used to provide basic information and a change history for the†ó°ñ°dONLNdlI<U÷* Wscript. Below is a sample script header,  the information contained within it should be†ó°ñ°dONLNdƒU<aå* self-explanatory.†ó°ñ†ó°ñ,    Monaco
  2410.     °dONLNd÷l`wf+$#†ó°ñ°dONLNdÿw`ÇÚ* C# *****************************************************************†ó°ñ°dONLNdÇ`çf* #†ó°ñ°dONLNdç`òf* #°dONLNd çÑò¿)$
  2411. File Name:°dONLNd+çÃò)H AppScript.vu†ó°ñ°dONLNd8ò`£f(¿~#†ó°ñ°dONLNd:£`Æf* #°dONLNd<£ÑÆ∫)$    Contains:°dONLNdF£ÃƇ)H.QuickLook test script for myApplication v. 2.0†ó°ñ°dONLNduÆ`πf(÷~#†ó°ñ°dONLNdwπ`ƒf* #°dONLNdyπуΔ)$ Written by:°dONLNdÖπÃ,)HJoe Bob Scripter†ó°ñ°dONLNdñƒ`œf(Ï~#†ó°ñ°dONLNdòœ`⁄f* #°dONLNdöœÑ⁄¿)$
  2412. Copyright:°dONLNd•œÃ⁄)H4© 1993 by Apple Computer, Inc., all rights reserved.†ó°ñ°dONLNd⁄⁄`Âf(~#†ó°ñ°dONLNd‹Â`* F# ********************************************************************†ó°ñ°dONLNd#`˚f* #°dONLNd'Ã˚)l C h a n g e°dONLNd48˚)l"H i s t o r y (most recent first):†ó°ñ°dONLNdW˚`(#~F# ********************************************************************†ó°ñ°dONLNdû`f* #†ó°ñ°dONLNd†`f* #°dONLNd£®¿)HVers°dONLNd®Ã)$  Date°dONLNdØ8)HAuthor°dONLNd∑Ĭ)l Description†ó°ñ°dONLNd√`'f(D~#°dONLNdΔ®'¿)H----°dONLNdÀÃ'¸)$--------°dONLNd‘'8)H------°dONLNd€\'‡)H----------------------†ó°ñ°dONLNdÚ'`2f(O~#°dONLNdı'®2¿)H<1+>°dONLNd˙'Ã2¸)$ 5/25/93°dONLNd'2J)H    Frank Lee°dONLNd
  2413. '\2™)H
  2414. Adding header†ó°ñ°dONLNd2`=f(Z~#†ó°ñ°dONLNd=`H* F# ********************************************************************†ó°ñ°dONLNdeH`Sf* #†óˇÃ◊#ˇ ˇˇˇˇ#◊°ñ 
  2415. _,Times
  2416. .ˇ°dONLNdˇˇ(⁄Z16°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ,     Helvetica
  2417. °dONLNd/<>√(YZLibrary Declarations†ó°ñ
  2418. °dONLNd=<I¡* SLibrary declarations are necessary whenever a script makes a call to a task that is†ó°ñ°dONLNdiI<U‘* Ucontained with in a library. For more information concerning tasks that are contained†ó°ñ°dONLNdøU<aÕ* Twithin each specific library please refer to Appendix E: Tasks within Libraries. The†ó°ñ°dONLNda<mÃ* Pfollowing example shows a sample library declaration. Note: The following sample†ó°ñ°dONLNdem<y÷* Vlibrary declaration contains the minimum libraries that are necessary for developing a†ó°ñ°dONLNdºy<Ö£* Standard QuickLook.†ó°ñ†ó°ñ†ó°ñ,    Monaco
  2419.     °dONLNd–û`©¯+$%D####################################################################†ó°ñ°dONLNd©`¥f* #°dONLNd©¥Ä)¥External libraries†ó°ñ°dONLNd/¥`ø¯(‹~D#===================================================================†ó°ñ°dONLNdtø` Œ* =Libraries "Output.Lib", "DoTasks.Lib","Draw.Lib", "Font.Lib",†ó°ñ°dONLNd≤ `’b* +"Globals.Lib", "LaunchQuit.Lib", "TCS.Lib";†ó°ñ†ó°ñ
  2420. °dONLNdfiÁ<ˆÌ(ZApplication Specific Tasks†ó°ñ
  2421. °dONLNd˘ı<‘* ZThe application specific tasks section of a script is the section that provides the script†ó°ñ°dONLNdT<
  2422. Â* \writer with the most flexibility. This section is where the script writer  should define any†ó°ñ°dONLNd±
  2423. <π* Sapplication specific data structures, tasks used for task overrides, as well as any†ó°ñ°dONLNd<%Ê* Zadditional application specific tasks. For examples on what is expected in the application†ó°ñ°dONLNd`%<1Í* Yspecific tasks section please refer to either Appendix B: Sample QuickLook  or any of the†ó°ñ°dONLNd∫1<=ò* SPEC S&L scripts.†ó°ñ†ó°ñ
  2424. °dONLNdÃQ<`≥*"Script Declaration†ó°ñ
  2425. °dONLNdfl_<kÊ* \The script declaration indicates the beginning of the body of the script. It begins with the†ó°ñ°dONLNd<k<wÀ* Vword “Script” followed by the script's title, which in terms is followed by the script†ó°ñ°dONLNdìw<Éæ* parameter(s). For example:†ó°ñ†ó°ñ
  2426.     °dONLNdÆè<öÆ*# Script Definition†ó°ñ°dONLNd¬ö<•* !Script Sample (Param1, Param2...)†ó°ñ†ó°ñ
  2427. °dONLNd‰±<Ω‚*YScripts written for SPEC libraries take advantage of the script parameter feature in V.U.†ó°ñ°dONLNd>Ω<…€* [to control the depth of testing to perform. Utilizing this technique, the script writer can†ó°ñ°dONLNdö…<’Í* \provide flexibility to perform different complexity of tests by letting the person executing†ó°ñ°dONLNd˜’<·“* Uthe script change the script parameters at run time. There are two ways to change the†ó°ñ°dONLNdM·<ÌÁ* [script parameters, using Virtual User's Setup menu or using a controller script to redefine†ó°ñ°dONLNd©Ì<˘Ä* the parameter.†ó°ñ†ó°ñ°dONLNdπ<€*TThe convention used for SPEC compliant scripts is one script parameter. For example:†ó°ñ†ó°ñ
  2428.     °dONLNd<(*%script MacDrawPro (ScriptLevel := -1)†ó°ñ†ó°ñ
  2429. °dONLNd44<@™*JFor more information see Controlling the Test Level section in Appendix G.†ó°ñ†ó°ñ
  2430. °dONLNdT<c´*"Body Of A Script†ó°ñ
  2431. °dONLNdêb<n◊* WThe body of the script is where the calls to individual tasks are made. The body of the†ó°ñ°dONLNdËn<z€* XSPEC S&L scripts begins with global definitions and initialization. After this, the next†ó°ñ°dONLNd    Az<Ü* /step is to launch the application to be tested.†óˇæ◊#ˇ ˇˇˇˇ#◊°ñ 
  2432. _,Times
  2433. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛17†ó°ñ°dONLNd)<5„(QZYWithin the body of each QuickLook script there are five basic areas of functionality that†ó°ñ°dONLNdZ5<A°* are normally present.†ó°ñ°dONLNdpA`M+$ #1) Application setup - DoSetUpApp()†ó°ñ°dONLNdïM`Y* $2) Exercise drawing tools - DoDraw()†ó°ñ°dONLNdªY`e¶* E3) Exercise text entry by changing fonts, sizes and styles - DoText()†ó°ñ°dONLNde`q*  4) Exercise windows - DoWindow()†ó°ñ°dONLNd%q`}X* 15) Application completion routines - DoCloseApp()†ó°ñ†ó°ñ°dONLNdXâ<ï•(±Z1) Application Setup†ó°ñ†ó°ñ°dONLNdm§<∞›*UThe standard SPEC S&L QuickLook definition requires that  certain specific test cases†ó°ñ°dONLNd√∞<º‹* Vare executed. Many applications handle these test cases in different ways, and some do†ó°ñ°dONLNdº<»◊* Wnot support them at all. There are a couple of high level miscellaneous tasks that were†ó°ñ°dONLNdr»<‘∑* Ndeveloped to handle a variety of application idiosyncrasies. For example, some†ó°ñ°dONLNd¡‘<‡Ê* Uapplications display a default document window automatically when launched, others do†ó°ñ°dONLNd‡<ÏÂ* Ynot. The following is an example of the convention used to describe task definitions. For†ó°ñ°dONLNdqÏ<¯≈* Pmore details, see the heading “Conventions Used for Tasks Definitions” under the†ó°ñ°dONLNd¬¯<∫* Library Overview section.†ó°ñ†ó°ñ,    Monaco
  2434. °dONLNd‹<Ñ* return value°dONLNdÈ®‡)lTaskNameǰdONLNdÒ‡é)8( parameter1, parameter2,...)†ó°ñ†ó°ñ°dONLNd(<5T(QZnada°dONLNd(m5≥)1
  2435. DoSetUpAppÇİdONLNd(≥5¡)F-( pDismissOpeningDialog, pDefaultWindowSpec, †ó°ñ°dONLNdP4∫AŒ+ .pNewDocPath, pDismissNewDocDialog,pScrapText, †ó°ñ°dONLNdÇ@∫Mt* pScrapPict, pSaveDoc, pOpenDoc)†ó°ñ†ó°ñ
  2436. °dONLNd¢W`c (~LDoSetUpApp() is a high level task that calls the appropriate low-level tasks†ó°ñ°dONLNdÔc`o√* Hnecessary to generate predefined QuickLook test cases. The parameters to†ó°ñ°dONLNd8o`{ƒ* IDoSetUpApp() allow the script writer to specify the way to handle several†ó°ñ°dONLNdÇ{`áŸ* Qapplication specific test cases including: Dismissing a dialog that appears after†ó°ñ°dONLNd‘á`ìfi* Olaunching, define what is the default window specifier, the menu items required†ó°ñ°dONLNd$ì`üÁ* Pfor selecting a new document, dismissing any dialogs that appear when creating a†ó°ñ°dONLNduü`´fi* Mnew document, whether or not the application supports text and/or PICT copied†ó°ñ°dONLNd√´`∑ª* Efrom the scrapbook, And whether or not to save the document. For more†ó°ñ°dONLNd    ∑`√≠* Cinformation see the task header of DoSetUpApp() in the DoTasks.lib.†ó°ñ†ó°ñ
  2437. °dONLNdMœ`‹ò*Examples
  2438. ǰdONLNdU–ò‹õ)8:†ó°ñ
  2439.     °dONLNdW‹`ÁV(~)• DoSetUpApp(1,0,{"New","File"},1,1,1,1);†ó°ñ†ó°ñ°dONLNdÇÚm˝·+
  2440. ># After launching it will dismiss the dialog that appears, the†ó°ñ°dONLNd¡˝vÃ+     9document window is the first window that has a zoom and a†ó°ñ°dONLNd˚vÿ* ;close box, select the 'New' menu item from the 'File' menu,†ó°ñ°dONLNd7v‰* =dismiss the dialog that appears, copy and paste text from the†ó°ñ°dONLNduv)‰* =scrapbook, copy and paste a PICT from the scrapbook, and save†ó°ñ°dONLNd≥)v4≤*
  2441. the file. †ó°ñ†ó°ñ°dONLNdø?`Jû(g~5• DoSetUpApp(0,1,{"New File","Document"}, 0, 0,0,0 );†ó°ñ†ó°ñ°dONLNd˜Um`œ+
  2442. ;# After launching there shouldn't be a dialog that appears,†ó°ñ°dONLNd    3`vk‰+     =select the 'New File' menu item from the 'Document' menu, the†ó°ñ°dONLNd    qkvvfi* <document window is ordinality 1 but not the first one with a†ó°ñ°dONLNd    ÆvvÅÿ* ;zoom and close box, no dialog should appear after selecting†ó°ñ°dONLNd    ÍÅvå“* :'New File', it will not copy and paste text or a PICT from†ó°ñ°dONLNd
  2443. %åvóä* .the scrapbook, and it will not save the file. †óˇ ÷◊#ˇ ˇˇˇˇ#◊°ñ 
  2444. _,Times
  2445. .ˇ°dONLNdˇˇ(⁄Z18°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)<5¬(QZ2) Exercise Drawing Tools
  2446. w°dONLNd&√5 )á  
  2447. w°dONLNd) 5w)"- (see Performing Draw Operations)†ó°ñ†ó°ñ°dONLNd>A`M{(i~Note:y¿°dONLNdCA|M‡)G using MouseTrapper may greatly enhance your ability to define the Draw†ó°ñ°dONLNdãMY∞+ structures.†ó°ñ†ó°ñ°dONLNdóe<qµ(çZ3) Exercise Text Entry  ¿°dONLNdØe∂q()z- (see Exercising Fonts)†ó°ñ†ó°ñ°dONLNd»}<â≠(•Z4) Exercise Windows  œ°dONLNd›}≠â2)q- (see Exercising Windows)†ó°ñ†ó°ñ°dONLNd¯ï<°@(ΩZ15) Application completion routines - DoCloseApp()†ó°ñ†ó°ñ,    Monaco
  2448. °dONLNd*∞<ΩT*nada°dONLNd/∞`Ω¶)$
  2449. DoCloseAppÇİdONLNd9∞¶ΩÍ)F6( pSaveRevert, pDismissAboutBox, pPageSetup, pPrinter,†ó°ñ°dONLNdsº®…Ã+ pQuit)†ó°ñ†ó°ñ
  2450. °dONLNdz”`fl÷(˚~NDoCloseUpApp() is a high level task that calls the appropriate low-level tasks†ó°ñ°dONLNd…fl`Î√* Hnecessary to generate predefined QuickLook test cases. The parameters to†ó°ñ°dONLNdÎ`˜¬* IDoCloseApp() allow the script writer to specify the way to handle several†ó°ñ°dONLNd\˜`‘* Napplication specific test cases including: Save a document, modify it and then†ó°ñ°dONLNd´`€* Srevert to the last save version, Whether or not it is possible to display the about†ó°ñ°dONLNdˇ`Ã* Mbox and dismiss it, whether or not to test Page Setup and/or  Print. For more†ó°ñ°dONLNdM`'Ø* Dinformation  See the task header of DoCloseApp() in the DoTasks.lib.†ó°ñ†ó°ñ
  2451. °dONLNdí3`@ò*Examples
  2452. ǰdONLNdö4ò@õ)8:†ó°ñ
  2453.     °dONLNdú@`K(h~• DoCloseApp(1,1,1,1,1);†ó°ñ†ó°ñ°dONLNd∑Vma·+
  2454. ># Save a document, modify it and then revert to the last saved†ó°ñ°dONLNdˆavlÿ+     ;version, then select the 'About' menuItem, and click in the†ó°ñ°dONLNd2lvw‰* =center of the screen once to dismiss it, and do whatever Page†ó°ñ°dONLNdpwvÇZ* &Setup and Printer tests were defined. †ó°ñ†ó°ñ,     Helvetica
  2455. °dONLNdòì<¢((ΩZ"Scripts Included With This Package†ó°ñ
  2456. °dONLNdª°<≠Â* VSPEC S&L includes over 20 Virtual User scripts written using the techniques previously†ó°ñ°dONLNd≠<π’* Rmentioned. They exercise some of the most popular Macintosh applications and are a†ó°ñ°dONLNdeπ<≈‡* Tgood source of examples. See Appendix C for a complete list of the SPEC S&L scripts.†ó°ñ†óˇ¢◊#ˇ ˇˇˇˇ#◊°ñ 
  2457. _,Times
  2458. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛19†ó°ñ,     Helvetica
  2459. °dONLNd6<H›(cZLibraries Overview TXT
  2460.  gXg
  2461. †ó°ñ†ó°ñ
  2462. °dONLNdV<bÍ*\Many of our libraries rely on routines that are contained in separate library files. We have†ó°ñ°dONLNdpb<n–* Rattempted to limit dependencies where possible. However, in order to organize them†ó°ñ°dONLNd√n<zŸ* Ulogically, retaining modularity, certain dependencies were necessary. The layer model†ó°ñ°dONLNdz<Üfi* Tdiscussed in a later section (SPEC S&L Layer Model) simplifies the dependencies  See†ó°ñ°dONLNdnÜ<í** 2Appendix D for a list of the library dependencies.†ó°ñ†ó°ñ
  2463. °dONLNd°§<≥Á* How To Use The Libraries†ó°ñ
  2464. °dONLNd∫≤<æÍ* XThe SPEC S&L libraries are provided so that you can build your custom libraries and test†ó°ñ°dONLNdæ< ‰* [scripts based on the tasks in them. The libraries have tasks that are published for use and†ó°ñ°dONLNdo <÷⁄* Tsome supporting tasks that are not meant for use by you. These unpublished tasks may†ó°ñ°dONLNdƒ÷<‚Á* Ychange in future and/or will not be supported. They are there to make the other published†ó°ñ°dONLNd‚<Ór* tasks work.†ó°ñ†ó°ñ°dONLNd+˙<fi*UYou can use any of the published tasks in the SPEC S&L libraries. The published tasks†ó°ñ°dONLNdÅ<œ* Nare marked (accessible from the Mark menu in MPW). We follow the convention of†ó°ñ°dONLNd–<ï* Ddefining published tasks using the uppercase word TASK. For example:†ó°ñ†ó°ñ,    Monaco
  2465.     °dONLNd*`5ò+$4TASK SelectMenuItem(menu1, menu2 := "", menu3 := "")†ó°ñ°dONLNdK5`@~* begin†ó°ñ°dONLNdQ@`Kf* .†ó°ñ°dONLNdSK`Vx* end;†ó°ñ†ó°ñ
  2466. °dONLNdXb<n„(äZYis a task that is published for you to use from your custom libraries and scripts. Do NOT†ó°ñ°dONLNd≤n<zÁ* Zedit any of the files in the SPEC S&L package. All the text files are provided to you with†ó°ñ°dONLNd
  2467. z<Üfl* Zthe read-only flag set. If you have a need to enhance any particular library, consider the†ó°ñ°dONLNdhÜ<í›* $options given later in this section.†ó°ñ†ó°ñ
  2468. °dONLNdé§<≥ * Library Task Benefits†ó°ñ
  2469. °dONLNd§≤<æ√* PMany of the tasks in the lower layer libraries, (see SPEC S&L Layer Model), like†ó°ñ°dONLNdıæ< ª* QUserInterface.Lib, have parallel functions provided in the Virtual User scripting†ó°ñ°dONLNdG <÷›* Ylanguage. The benefit of calling the tasks in the libraries, as opposed to making Virtual†ó°ñ°dONLNd°÷<‚‹* \User primitive calls, is that the tasks in the libraries perform error checking, log results†ó°ñ°dONLNd˛‚<ÓÒ* &and return result values. For example:†ó°ñ†ó°ñ°dONLNd*˙Ñ
  2470. í+H• °dONLNd,˝í    fl)The library call:†ó°ñ
  2471.     °dONLNd>
  2472. `b(1~ °dONLNdB    Ã>)lSelectButton("OK");†ó°ñ†ó°ñ
  2473. °dONLNdX#Ñ3í(N¢• °dONLNdZ&í2))Replaces the VU primitive call:†ó°ñ
  2474.     °dONLNd}2Ã=P+: Select[button t:'OK'];†ó°ñ†ó°ñ
  2475. °dONLNdîL<Xº(tZThe call to the library will:†ó°ñ°dONLNd≥XddÑ+( Check(@°dONLNd∏XÖdQ)!. - to see if the button exists and is enabled.†ó°ñ°dONLNdËddpx(åÇLogŰdONLNdÎdxp) - Selected button titled 'OK'.†ó°ñ°dONLNd pd|à(òÇReturn&İdONLNdpâ|V)%, - the name of the button that was selected.†ó°ñ†ó°ñ°dONLNdBàÑîõ(∞¢Note{İdONLNdFàúîÇ)1: The libraries make Virtual User primitive calls†óˇ^◊#ˇ ˇˇˇˇ#◊°ñ 
  2476. _,Times
  2477. .ˇ°dONLNdˇˇ(⁄Z20°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ,     Helvetica
  2478. °dONLNd/<>*(YZ#Adding To / Modifying The Libraries†ó°ñ
  2479. °dONLNd$=<I≤* PBefore you decide to add to, or modify the libraries, consider all your options.†ó°ñ†ó°ñ°dONLNdvU<a`*Hooks:†ó°ñ°dONLNd}a<m⁄* SThis package provides a number of undefined task references (hooks) for convenience†ó°ñ°dONLNd—m<yÿ* Rwhen customizing your tests. Refer to the section, "Hooks Provided in SPEC S&L" in†ó°ñ°dONLNd$y<ÖÂ* !Appendix G, for more information.†ó°ñ†ó°ñ°dONLNdFë<ùª*Redefine Default Values:†ó°ñ°dONLNd_ù<©⁄* VUse Custom.Lib to redefine global variables via the task InitCustom(). InitCustom() is†ó°ñ°dONLNd∂©<µŸ* Wcalled by InitGlobals() after all globals have been defined. Using this method does not†ó°ñ°dONLNdµ<¡#* 2require altering any other library in the package.†ó°ñ†ó°ñ°dONLNdAÕ<Ÿö*Add functionality:†ó°ñ°dONLNdTŸ<Ÿ* UBuild a library of your own that has tasks with new names that act as wrappers around†ó°ñ°dONLNd™Â<Ò•* Gthe tasks in the library from the SPEC S&L package. Now you can add any†ó°ñ°dONLNdÚÒ<˝* (enhancements to this customized library.†ó°ñ†ó°ñ°dONLNd    <Ü*
  2480. Modify Tasks:†ó°ñ†ó°ñ°dONLNd)!<-Δ*SCopy the task to be modified into your script or custom library, rename the task to†ó°ñ°dONLNd}-<9´* Gsomething different and make the changes you want. From now on you have†ó°ñ°dONLNd≈9<EË* Xdisassociated this task from the one in SPEC S&L package. This helps in two ways: first,†ó°ñ°dONLNdE<QÂ* Zin a future version of SPEC S&L if this task is modified your version of the task will not†ó°ñ°dONLNdyQ<]Ë* [be adversely affected; second, you can still use the original task for other purposes where†ó°ñ°dONLNd’]<i÷* !the modification is not required.†ó°ñ†ó°ñ
  2481. °dONLNd˜}<å˛*"Fixing A Bug In The Libraries†ó°ñ
  2482. °dONLNdã<óœ* TThis is something we would like you not to face. But if you do discover a bug in the†ó°ñ°dONLNdjó<£‡* SSPEC S&L, first report the problem to us using RADAR. If you need a fix immediately†ó°ñ°dONLNdæ£<Ø«* Pand cannot wait for the next release of SPEC S&L, then please adopt the approach†ó°ñ°dONLNdØ<ªô* Ementioned above for modifying SPEC S&L until a fix is made available.†ó°ñ†ó°ñ
  2483. °dONLNdUÕ<‹A* %Conventions Used For Task Definitions†ó°ñ
  2484. °dONLNd{‹<Ë≠*
  2485. NThe tasks defined in these libraries follow the convention indicated below in ,    Monaco
  2486. ^°dONLNd…€ÆË“(Ãitalic
  2487. _İdONLNdœ‹“ËÍ)$ text:†ó°ñ†ó°ñ
  2488. °dONLNd÷Ô<¸Ñ(Z return value°dONLNd„Ô®¸‡)lTaskNameǰdONLNdÎÔ‡¸é)8( parameter1, parameter2,...)†ó°ñ†ó°ñ
  2489. °dONLNd
  2490. `c(0~r
  2491. ~@°dONLNd d¶) eturn value
  2492. ŰdONLNd¶<)B     can be any VU valid type or 
  2493. »@°dONLNd6<T)ñnada
  2494. …@°dONLNd:TÓ)" (none), always listed on the left†ó°ñ°dONLNd]± “(<œmargin†ó°ñ†ó°ñ
  2495. °dONLNde,`9¶(U~
  2496. TaskName  
  2497. ÇİdONLNdo-¶9_)F(always indicated in bold/italicized text†ó°ñ†ó°ñ
  2498. °dONLNdôE`R (n~ ( parameter1, parameter2,...)   
  2499. à°dONLNdπF Ræ)¿parameters separated by commas†ó°ñ†ó°ñ†ó°ñ°dONLNdÿe`q—(ç~OAll the parameters inside a task definition begin with the letter “p”. For more†ó°ñ°dONLNd(q`}‹* Qinformation about particular parameters, default values, etc. see the task header†ó°ñ°dONLNdz}`â¥* inside the library.†óˇ
  2500. Œ◊#ˇ ˇˇˇˇ#◊°ñ 
  2501. _,Times
  2502. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛21†ó°ñ,     Helvetica
  2503. °dONLNd6<H(cZSPEC S&L Layer Model TXT
  2504.  gXg
  2505. †ó°ñ†ó°ñ
  2506. °dONLNdV<b€*USPEC S&L is intended to provide an insight into, and a solution for, some of the many†ó°ñ°dONLNdkb<n¬* Qissues that arise in developing an automation process. SPEC S&L's libraries are a†ó°ñ°dONLNdΩn<z‘* Ucompilation of tasks (procedures) that provide a variety of functions. They have been†ó°ñ°dONLNdz<Ü‘* Torganized into layers based upon function. Libraries in lower numbered layers do not†ó°ñ°dONLNdhÜ<í&* 0depend on any library in  higher numbered layer.†ó°ñ†ó°ñ°dONLNdöû`™Ü+$Layer I“¿°dONLNd°ûÜ™â)& 
  2507. °dONLNd§ûÙû)F3• Fundamental data structures and then manipulation†ó°ñ°dONLNd‹™Ã∂Y* #• Output formatting and redirection†ó°ñ°dONLNdµÃ¡g* (• Shared Global variable initializations†ó°ñ†ó°ñ
  2508. °dONLNd2À◊)+$
  2509. Custom.Lib†ó°ñ°dONLNdB◊„3* Geometry.Lib†ó°ñ°dONLNdT„Ô(* Globals.Lib†ó°ñ°dONLNdeÔ˚%*
  2510. OutPut.Lib†ó°ñ°dONLNdu˚ *
  2511. String.Lib†ó°ñ°dONLNdÖ"* Utility.Lib†ó°ñ†ó°ñ°dONLNdí`&ç(B~    Layer II 
  2512. °dONLNdùÃ&î)l3• External tool specifications and supporting tasks†ó°ñ†ó°ñ
  2513. °dONLNdÿ1=,+$ FileTool.Lib†ó°ñ°dONLNdÍ=I1* OnTarget.Lib†ó°ñ°dONLNd¸IU;* MathTool.vulib†ó°ñ†ó°ñ°dONLNd \`hè(Ñ~    Layer III(@°dONLNd\êhì)0 
  2514. °dONLNd\Ãh`)<'• Basic user interactions on the target†ó°ñ†ó°ñ
  2515. °dONLNdEs%+$ Gestalt.Lib†ó°ñ°dONLNdVã$* Palette.Lib†ó°ñ°dONLNdgãó@* StandardFile.Lib†ó°ñ°dONLNd}ó£* TCS.Lib†ó°ñ°dONLNdã£ØD* UserInterface.Lib†ó°ñ†ó°ñ°dONLNd¢ª`«é(„~Layer IV
  2516. |İdONLNd™ªè«ë)/ °dONLNd≠ªÃ«´)=:• High-level task oriented user interactions on the target†ó°ñ†ó°ñ
  2517. °dONLNdÌ“fi+$Draw.Lib†ó°ñ°dONLNd˚fiÍ* Font.Lib†ó°ñ°dONLNd    Íˆ<* LaunchQuit.Lib†ó°ñ°dONLNdˆ*     Print.Lib†ó°ñ°dONLNd, *
  2518. Select.Lib†ó°ñ°dONLNd<A* TargetCheck.Lib†ó°ñ°dONLNdR&* Text.Lib†ó°ñ†ó°ñ°dONLNd\-`9ç(U~Layer V 
  2519. °dONLNdf-Ã9™)l9• General support for using libraries on the lower layers†ó°ñ†ó°ñ
  2520. °dONLNd•DP)+$
  2521. DoTask.Lib†ó°ñ†ó°ñ°dONLNd±W`cé(~Layer VI
  2522. °dONLNdªWÃc7)l• Application specific tests†ó°ñ†ó°ñ
  2523. °dONLNd›nz+$DA.Lib†ó°ñ°dONLNdÈzÜM* WordProcessor.Lib†óˇÊ◊#ˇ ˇˇˇˇ#◊°ñ 
  2524. _,Times
  2525. .ˇ°dONLNdˇˇ(⁄Z22°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ,     Helvetica
  2526. °dONLNd6<H1(cZExercising Window Features TXT
  2527.  gXg
  2528. †ó°ñ†ó°ñ
  2529. °dONLNd\<kz*#Overview†ó°ñ
  2530. °dONLNd$j<v–* QSPEC S&L contains a collection of several tasks which support exercising the many†ó°ñ°dONLNdvv<ÇŒ* Ustandard window features, including: closing, zooming, resizing, scrolling, etc. This†ó°ñ°dONLNdÃÇ<é* Dsection describes the routines support testing window functionality.†ó°ñ†ó°ñ°dONLNdö<¶’*USpecifier is a parameter used throughout the window tasks. This parameter refers to a†ó°ñ°dONLNdh¶<≤”* Uwindow specifier and can be one of three types. It is possible to specify a window by†ó°ñ°dONLNdæ≤<æŸ* Sname by passing in the name of the window as a string, e.g. ZoomWindow('Untitled').†ó°ñ°dONLNdæ< ø* TIt is also possible to specify a window by ordinality by passing in an integer, e.g.†ó°ñ°dONLNdg <÷Ê* VZoomWindow(1). If a more complete window descriptor is required it is possible to pass†ó°ñ°dONLNdæ÷<‚⁄* Sany partial or complete window descriptor, e.g. ZoomWindow([window t: 'Untitled' c:†ó°ñ°dONLNd‚<ÓË* ^true s:Dialog]). If a specifier is set to 0 then actions will take place on the front document†ó°ñ°dONLNdqÓ<˙È* Rwindow, e.g. ZoomWindow(0). We have defined the front document window as the front†ó°ñ°dONLNdƒ˙<ª* Nmost window that contains a closebox and a growbox. If your applications front†ó°ñ°dONLNd<‚* Sdocument window does not contain a closebox and a growbox then you will be required†ó°ñ°dONLNdg<Ã*  to pass in the proper specifier.†ó°ñ†ó°ñ
  2531. °dONLNdà*<9Ï*Calling The Window Tasks†ó°ñ†ó°ñ,    Monaco
  2532. °dONLNd°D<QT*nada°dONLNd¶DmQ•)1DoWindowǰdONLNdÆD•QÈ)86( pTestMethod, pSpecifier, pRestoreWindow, pNumTimes )†ó°ñ†ó°ñ
  2533. °dONLNdÊ[`g¿(É~JDoWindow() is a high level task that calls the appropriate low-level tasks†ó°ñ°dONLNd1g`sŸ* Nnecessary to perform predefined window test cases. There are several different†ó°ñ°dONLNdÄs`fl* Ptest methods available for DoWindow() these are discussed in detail below. It is†ó°ñ°dONLNd—`ãŒ* Kpossible to use the global gWindowMethod to set the test method, only if no†ó°ñ°dONLNdã`ó∂* Dparameters are passed to DoWindow(). This is because parameters take†ó°ñ°dONLNdbó`£ * precedence over gWindowMethod .†ó°ñ†ó°ñ°dONLNdÉØ`ª‚*NNote: DoWindow() is the only task within the window routines  not contained in†ó°ñ°dONLNd“ª`«‚* QUserInterface.Lib, it is contained in DoTasks.Lib. If some of the tests performed†ó°ñ°dONLNd$«`” * Jby a particular TestMethod in DoWindows() are not available for a specific†ó°ñ°dONLNdo”`flΩ* Mapplication it is possible to define which tests are available by setting the†ó°ñ°dONLNdΩfl`ÎF* .appropriate flags in the global gDoWindowList.†ó°ñ†ó°ñ
  2534. °dONLNdϘ`ò*Examples
  2535. ǰdONLNdÙ¯òõ)8:†ó°ñ
  2536.     °dONLNdˆ`¥(,~• DoWindow(0);°dONLNd‡)ê(# Nothing - DoWindow() will not execute.†ó°ñ°dONLNd/`f(7~ †ó°ñ°dONLNd3`%∫* • DoWindow(1); °dONLNdD%™)ê# Completed set of window tests†ó°ñ°dONLNdd%`0f(M~ †ó°ñ°dONLNdg0`;¥* • DoWindow(2);°dONLNdw0;™)ê# QuickLook set of window tests†ó°ñ†ó°ñ°dONLNdóF`Q(n~• DoWindow({1,3,5,7,9});°dONLNd∞FQŒ)¥# Pass in a set of window tests†ó°ñ°dONLNd’Q\Œ* # (See TestWindow() description†ó°ñ°dONLNd˙\gD* # below)†ó°ñ†óˇ≤◊#ˇ ˇˇˇˇ#◊°ñ 
  2537. _,Times
  2538. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛23†ó°ñ,    Monaco
  2539. °dONLNd)<6f(RZinteger°dONLNd)m6≥)1
  2540. TestWindowÇİdONLNd)≥6)F8( pSpecifier, pFunctionList, pRestoreWindow, pNumTimes, †ó°ñ°dONLNdL5∫B+     pDragXY )†ó°ñ†ó°ñ
  2541. °dONLNdWM`YÂ(u~QPerforms the specified functions as defined in the input parameter pFunctionList.†ó°ñ°dONLNd©Y`eÁ* TIf pFunctionList is not passed, or is passed as 0, then the following operations are†ó°ñ°dONLNd˛e`qŸ* Lperformed on the window specified by input parameter pSpecifier. The default†ó°ñ°dONLNdKq`}≈* Hbehavior will perform the following behaviors on the front most document†ó°ñ°dONLNdî}`ââ* window.†ó°ñ†ó°ñ°dONLNdúïѰÍ+$LListed below is the list of function numbers and a brief description of what†ó°ñ°dONLNdȰ®≠2+$ that particular function does:†ó°ñ†ó°ñ°dONLNdπÑ≈ä(·¢0°dONLNd
  2542. π®≈¿)$6Complete Window Test - Performs functions 1 through 17†ó°ñ°dONLNdB≈®—f* %(17 is done twice - zoom & zoom back)†ó°ñ°dONLNdh—Ñ›ä(˘¢1°dONLNdj—®›R)$"Resize to random width and height.†ó°ñ°dONLNdç›ÑÈä(¢2°dONLNdè›®È})$-Attempt resize to 20,20 (should not allow it)†ó°ñ°dONLNdΩÈÑıä(¢3°dONLNdøÈ®ıç)$2Scroll the vertical scroll bar to random location.†ó°ñ°dONLNdÚıÑä(¢4°dONLNdÙı®z)$/Scroll the vertical scroll bar to end location.†ó°ñ°dONLNd$Ñ
  2543. ä()¢5°dONLNd&®
  2544. ô)$5Scroll the vertical scroll bar to beginning location.†ó°ñ°dONLNd\
  2545. Ñä(5¢6°dONLNd^
  2546. ®é)$4Scroll the vertical scroll bar to original location.†ó°ñ°dONLNdìÑ%ä(A¢7°dONLNdï®%ö)$4Scroll the horizontal scroll bar to random location.†ó°ñ°dONLNd %Ñ1ä(M¢8°dONLNdÃ%®1á)$1Scroll the horizontal scroll bar to end location.†ó°ñ°dONLNd˛1Ñ=ä(Y¢9°dONLNd1®=•)$7Scroll the horizontal scroll bar to beginning location.†ó°ñ°dONLNd8=ÑIê(e¢10°dONLNd;=®Iõ)$6Scroll the horizontal scroll bar to original location.†ó°ñ°dONLNdrIÑUê(q¢11°dONLNduI®Uw)$*Resize window to largest possible and then†ó°ñ°dONLNd†UÑaê(}¢12°dONLNd£U®aW)$#Resize back to smallest window size†ó°ñ°dONLNd«aÑmê(â¢13°dONLNd a®mfl)$@Size window across screen border to second screen (if 2 screens)†ó°ñ°dONLNd m®y’*     and back.†ó°ñ°dONLNdyÑÖê(°¢14°dONLNdy®Ö|)$)Drag window across screen border and back†ó°ñ°dONLNdBÖÑëê(≠¢15°dONLNdEÖ®ëù)$2Drag random location and back to original location†ó°ñ°dONLNdxëÑùê(π¢16°dONLNd{ë®ùd)$&Drag window back to original location.†ó°ñ°dONLNd¢ùÑ©ê(≈¢17°dONLNd•ù®©«)$Zoom.†ó°ñ°dONLNd´©Ñµê(—¢18°dONLNdÆ©®µ2)$Complete Window Size Test†ó°ñ°dONLNd µ∫¡t+ 'Performs functions 1, 2, 11, 12, and 13†ó°ñ°dONLNdÚ¡ÑÕê(È¢19°dONLNdı¡®Õ:)$Complete Window Scroll Test†ó°ñ°dONLNdÕ∫Ÿå+ .Performs functions 3, 4, 5, 6, 7, 8, 9, and 10†ó°ñ°dONLNdBŸÑÂê(¢20°dONLNdEŸ®Â5)$Complete Window Drag Test†ó°ñ°dONLNdaÂ∫Ò\+ !Performs functions 14, 15, and 16†ó°ñ°dONLNdÉÒÑ˝ê(¢21°dONLNdÜÒ®˝:)$Complete Window Zoom Test†ó°ñ°dONLNd¢˝∫    †+ -Performs function 17 twice (zoom - zoom back)†ó°ñ°dONLNd–    Ñê(1¢22°dONLNd”    ®b)$"A More Complete Window Scroll Test†ó°ñ°dONLNd¯∫!õ+ 2Performs functions 2, 3, 4, 5, 6, 7, 8, 9, and 10.†ó°ñ°dONLNd+!∫-‡* >Note: This is the same as 19 except it sizes the window to the†ó°ñ°dONLNdj-∫9Ê* Dsmallest possible size. This is better in that it is more likely for†ó°ñ°dONLNdØ9∫E7* the scrollbars to be active.†ó°ñ°dONLNdÃEÑQê(m¢23°dONLNdœE®Q^)$ A More Complete Window Drag Test†ó°ñ°dONLNdÚQ∫]h+ $Performs functions 2, 14, 15, and 16†ó°ñ†ó°ñ°dONLNdi`u{(ë~Note:y¿°dONLNdi|u≤)B This is the same as 20 except it sizes the window to the smallest†ó°ñ°dONLNd_u`Å™(ù~Ipossible size. This is better in that it is more likely for the window to†ó°ñ°dONLNd©Å`çC* /be able to be dragged across screen boundaries.†óˇ6◊#ˇ ˇˇˇˇ#◊°ñ 
  2547. _,Times
  2548. .ˇ°dONLNdˇˇ(⁄Z24°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ,    Monaco
  2549. °dONLNd)`6ò(R~Examples
  2550. ǰdONLNd*ò6õ)8:†ó°ñ
  2551.     °dONLNd
  2552. 6`A¿(^~• TestWindow(); °dONLNd6ÃA˛)l3# Complete window test on frontmost document window†ó°ñ°dONLNdOAdLj(iÇ †ó°ñ°dONLNdSL`Wfi(t~• TestWindow(1, 12); †ó°ñ°dONLNdjWmb·+
  2553. ># Drag the frontmost window across the screen border and back.†ó°ñ†ó°ñ°dONLNd©m`x (ï~ • TestWindow(0, {1,2,3,5}, 1,2);†ó°ñ†ó°ñ°dONLNdÀÉméΩ+
  2554. 8# Perform tests 1,2,3,5 on the frontmost document window†ó°ñ°dONLNdévôÃ+     9twice, restores the window to its original condition when†ó°ñ°dONLNd>ôv§î* done.†ó°ñ†ó°ñ
  2555. °dONLNdD∞<Ωf(ŸZinteger°dONLNdL∞mΩ‰)1DragAcrossScreensÑ@°dONLNd]∞‰Ωn)w( pSpecifier, pDragXY )†ó°ñ†ó°ñ
  2556. °dONLNdu»`‘⁄(~LThis task provides a mechanism to drag a window across multiple monitors. In†ó°ñ°dONLNd¬‘`‡Õ* Jorder to drag a window across multiple monitors the target machine must be†ó°ñ°dONLNd
  2557. ‡`ÏÎ* Sconfigured with multiple monitors. This task will verify that multiple monitors are†ó°ñ°dONLNdaÏ`¯fi* Ravailable, if they are not nothing will be done, and the appropriate return values†ó°ñ°dONLNd¥¯`Æ* will be returned.†ó°ñ†ó°ñ
  2558. °dONLNdΔ`ò*Examples
  2559. ǰdONLNdŒòõ)8:†ó°ñ
  2560.     °dONLNd–`(Í(E~• DragAcrossScreens(0);†ó°ñ†ó°ñ°dONLNdÈ3m>€+
  2561. =# Drag the frontmost document window across multiple monitors†ó°ñ°dONLNd'>vIÓ+     if they are present.†ó°ñ†ó°ñ
  2562. °dONLNd<T<af(}Zinteger°dONLNdDTma‰)1SizeAcrossScreensÑ@°dONLNdUT‰an)w( pSpecifier, pDragXY )†ó°ñ†ó°ñ
  2563. °dONLNdml`x◊(î~LThis task provides a mechanism to size a window across multiple monitors. In†ó°ñ°dONLNd∫x`ÑÀ* Jorder to size a window across multiple monitors the target machine must be†ó°ñ°dONLNdÑ`êÎ* Sconfigured with multiple monitors. This task will verify that multiple monitors are†ó°ñ°dONLNdYê`úfi* Ravailable, if they are not nothing will be done, and the appropriate return values†ó°ñ°dONLNd¨ú`®Æ* will be returned.†ó°ñ†ó°ñ
  2564. °dONLNdæ¥`¡ò*Examples
  2565. ǰdONLNdΔµò¡õ)8:†ó°ñ
  2566.     °dONLNd»¡`ÃÍ(È~• SizeAcrossScreens(0);†ó°ñ°dONLNd·Ãm◊€+
  2567. =# Size the frontmost document window across multiple monitors†ó°ñ°dONLNd◊v‚Ó+     if they are present.†ó°ñ†ó°ñ
  2568. °dONLNd4Ó<˚f(Zinteger°dONLNd<Óm˚≥)1
  2569. DragWindowÇİdONLNdFÓ≥˚fl)F2( pHorizontalPixels, pVerticalPixels, pSpecifier, †ó°ñ°dONLNd{˙∫+
  2570. pAbsolutely )†ó°ñ†ó°ñ
  2571. °dONLNdâ`·(:~OThis task provides a mechanism to drag windows either to specified locations or†ó°ñ°dONLNdŸ`*ê*     randomly.†ó°ñ†ó°ñ
  2572. °dONLNd„6`Cò*Examples
  2573. ǰdONLNdÎ7òCõ)8:†ó°ñ
  2574.     °dONLNdÌC`N∫(k~• DragWindow();°dONLNd˝CÃN‡)l.# Randomly drag the frontmost document window.†ó°ñ†ó°ñ°dONLNd,Y`d8(Å~$• DragWindow(25,50, "Untitled", 0 );†ó°ñ°dONLNdQdmoœ+
  2575. ;# Drag the window titled 'Untitled' 25 pixels horizontally,†ó°ñ°dONLNdéovzΔ+     8and 50 pixels vertically relative to the windows current†ó°ñ°dONLNd«zvÖ¨*     location.†ó°ñ†óˇ ◊#ˇ ˇˇˇˇ#◊°ñ 
  2576. _,Times
  2577. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛25†ó°ñ,    Monaco
  2578. °dONLNd)<6f(RZinteger°dONLNd)m6≥)1
  2579. SizeWindowÇİdONLNd)≥6Ò)F5( pPixelsWide, pPixelsHigh, pSpecifier, pAbsolutely )†ó°ñ†ó°ñ
  2580. °dONLNdHA`Mfi(i~OThis task provides a mechanism to size windows either to specified locations or†ó°ñ°dONLNdòM`Yê*     randomly.†ó°ñ†ó°ñ
  2581. °dONLNd¢e`rò*Examples
  2582. ǰdONLNd™fòrõ)8:†ó°ñ
  2583.     °dONLNd¨r`}∫(ö~• SizeWindow();°dONLNdºrÃ}‡)l.# Randomly size the frontmost document window.†ó°ñ†ó°ñ°dONLNdÎà`ì8(∞~$• SizeWindow(25,50, "Untitled", 0 );†ó°ñ†ó°ñ°dONLNdûm©œ+
  2584. ;# Size the window titled 'Untitled' 25 pixels horizontally,†ó°ñ°dONLNdR©v¥Δ+     8and 50 pixels vertically relative to the windows current†ó°ñ°dONLNdã¥vøî* size.†ó°ñ†ó°ñ
  2585. °dONLNdëÀ<ÿf(ÙZinteger°dONLNdôÀmÿ≥)1
  2586. ZoomWindowÇİdONLNd£À≥ÿ)F( pSpecifier )†ó°ñ†ó°ñ
  2587. °dONLNd≤„`ÔÉ( ~9This task provides a mechanism to zoom specified windows.†ó°ñ†ó°ñ
  2588. °dONLNdÏ˚`ò*Examples
  2589. ǰdONLNdÙ¸òõ)8:†ó°ñ
  2590.     °dONLNdˆ`∫(0~• ZoomWindow();°dONLNd¯)¥&# Zooms the frontmost document window.†ó°ñ†ó°ñ°dONLNd/`)ˆ(F~• ZoomWindow("Untitled");°dONLNdI)Ú)¥%# Zooms the window titled 'Untitled'.†ó°ñ†ó°ñ†ó°ñ
  2591. °dONLNdo?<Lf(hZinteger°dONLNdw?mL∫)1 CloseWindowÇ¿°dONLNdÇ?∫LÊ)M2( pHowClose, pOverwrite, pSpecifier, pNewDocName )†ó°ñ†ó°ñ
  2592. °dONLNdµW`cÕ(~JThis task provides a mechanism to close specified windows. There are three†ó°ñ°dONLNdc`o…* Hpossible ways to close a window, closebox, close menu item, and keyboard†ó°ñ°dONLNdIo`{›* Qequivalent. Using the first input parameter, pHowClose, it is possible to specify†ó°ñ°dONLNdõ{`áÊ* Othe method desired to close the window. If changes to a document are made prior†ó°ñ°dONLNdÎá`ì¬* Kto closing, a dialog appears asking whether to save the changes or not, the†ó°ñ°dONLNd7ì`ü⁄* MsaveFlag parameter enables you to specify whether or not you want to save the†ó°ñ°dONLNdÖü`´æ* Cdocument, and the newDocName allows you to specify what to name the†ó°ñ°dONLNd…´`∑* (document if it hasn't been saved before.†ó°ñ†ó°ñ
  2593. °dONLNdÛ√`–ò*Examples
  2594. ǰdONLNd˚ƒò–õ)8:†ó°ñ
  2595.     °dONLNd˝–`€¿(¯~• CloseWindow();†ó°ñ†ó°ñ°dONLNdÊmÒ’+
  2596. <# Close the frontmost document window by selecting the close†ó°ñ°dONLNdLÒv¸Z+     &box, will save the document if needed.†ó°ñ†ó°ñ°dONLNds`fi(/~• CloseWindow(2,0,1);†ó°ñ†ó°ñ°dONLNdäm(€+
  2597. =# Close the frontmost window by way of a keyboard equivalent,†ó°ñ°dONLNd»(v3+     will not save the document.†ó°ñ†ó°ñ°dONLNd‰>`I(f~• CloseWindow(1,1,0,"myDoc")†ó°ñ†ó°ñ°dONLNdTm_·+
  2598. ># Close the frontmost document window by selecting the 'Close'†ó°ñ°dONLNd@_vjΔ+     8menu item, will save the document if needed with he name†ó°ñ°dONLNdyjvu¶* 'myDoc'.†óˇÍ◊#ˇ ˇˇˇˇ#◊°ñ 
  2599. _,Times
  2600. .ˇ°dONLNdˇˇ(⁄Z26°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ,    Monaco
  2601. °dONLNd)<6f(RZinteger°dONLNd)m6¡)1 ScrollWindowɰdONLNd)¡6Ì)T2( pWhichScrollBar, pDesirePosition, pMaxPosition )†ó°ñ†ó°ñ
  2602. °dONLNdGA`M‰(i~QThis task provides a mechanism to scroll windows using either the vertical or the†ó°ñ°dONLNdôM`Y≈* horizontal scrollbars.†ó°ñ†ó°ñ
  2603. °dONLNd∞e`rò*Examples
  2604. ǰdONLNd∏fòrõ)8:†ó°ñ
  2605.     °dONLNd∫r`}(ö~• ScrollWindow('H',1,2);†ó°ñ†ó°ñ°dONLNd‘àmì√+
  2606. 9# Scroll the document windows horizontal scrollbar to the†ó°ñ°dONLNdìvûƒ+    
  2607. position 1/2.†ó°ñ†ó°ñ°dONLNd©`¥ˆ(—~• ScrollWindow("V", 0,1);†ó°ñ†ó°ñ°dONLNd7øm ∑+
  2608. 7# Scroll the document windows vertical scrollbar to the†ó°ñ°dONLNdo v’‹+     topmost position.†óˇˆ◊#ˇ ˇˇˇˇ#◊°ñ 
  2609. _,Times
  2610. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛27†ó°ñ,     Helvetica
  2611. °dONLNd6<Hv(cZ#Performing Standard File Operations TXT
  2612.  gXg
  2613. †ó°ñ†ó°ñ
  2614. °dONLNd$V<eu*Overview†ó°ñ
  2615. °dONLNd-e<qÁ* VSPEC S&L contains a collection of tasks which support many of the features of Standard†ó°ñ°dONLNdÑq<}Δ* WFile, including: saving files, opening files, navigating directories, etc. This section†ó°ñ°dONLNd‹}<â;* 5describes the routines that make up StandardFile.Lib.†ó°ñ†ó°ñ°dONLNdï<°’*WMost of the tasks that support Standard File allow the script writer to pass parameters†ó°ñ°dONLNdk°<≠·* Yinto tasks to perform a specific operation. For example,  SaveAs() takes a file name as a†ó°ñ°dONLNd≈≠<π›* Yparameter allowing the scriptwriter to specify the name of the file to be saved. There is†ó°ñ°dONLNdπ<≈≤* Qone very high level task, DoFiles(), that automatically tests several features of†ó°ñ°dONLNdq≈<—“* TStandardFile. For example, DoFiles(2) will: Save a file (if a document with the same†ó°ñ°dONLNdΔ—<›â* Jname already exists it will be replaced), close the file, reopen the file.†ó°ñ†ó°ñ°dONLNdÈ<ıÁ*YThe Standard File library tasks will only work with System 7.0 or greater. The reason for†ó°ñ°dONLNdkı<’* Wthis is because of the way in which navigation and selection of files occurs within the†ó°ñ°dONLNd√<
  2616. Ê* [Standard File support tasks. Files and folders are selected by what is referred to as "Type†ó°ñ°dONLNd
  2617. <Ê* XSelecting". "Type Selecting" means selecting the desired item by typing its name.  While†ó°ñ°dONLNdx<%Â* [this is effective when the desired files and folders exist, it can cause problems when they†ó°ñ°dONLNd‘%<1√* Pdo not.  While we have done some error checking to help insure that the expected†ó°ñ°dONLNd%1<=‚* Ybehavior is actually occurring,  proper set up of the target machines can greatly enhance†ó°ñ°dONLNd=<I‚* Xthe probability of success. NOTE: Since we use "Type Selecting" it is possible that only†ó°ñ°dONLNdÿI<UÁ* ]specifying the first couple of letters of each path element will actually navigate correctly,†ó°ñ°dONLNd6U<a’* Ofor example, The path  {"myHardDisk", "Folder1", "myDocuments"}  could possibly†ó°ñ°dONLNdÜa<m◊* Rhave been specified as {"myH", "Fol", "myDoc"}. Please use caution when using this†ó°ñ°dONLNdŸm<y†* Nmethod, since it is far less descriptive of what the desired result should be.†ó°ñ†ó°ñ
  2618. °dONLNd(Ö<î*!Calling The Standard File Library†ó°ñ†ó°ñ†ó°ñ,    Monaco
  2619. °dONLNdJ´<∏T*%nada°dONLNdO´m∏û)1DoFilesÅ¿°dONLNdV´û∏÷)14( pTestMethod, pFileName, pSaveAsFlag, pSelectOpen, †ó°ñ°dONLNdé∑®ƒÍ+
  2620. pRevertMI )†ó°ñ†ó°ñ
  2621. °dONLNdõŒ`⁄‡(ˆ~SDoFiles() is a high level task that calls the appropriate low-level tasks necessary†ó°ñ°dONLNdÔ⁄`Ê◊* Qto generate predefined Standard File test cases. There are several different test†ó°ñ°dONLNdAÊ`ÚÍ* Tmethods available in DoFiles, These are discussed in detail below. It is possible to†ó°ñ°dONLNdñÚ`˛ * Luse the global gFileMethod to set the test method, only if no parameters are†ó°ñ°dONLNd„˛`
  2622. ¨* Dpassed to DoFiles(). This is because parameters take precedence over†ó°ñ°dONLNd    (
  2623. `†* gFileMethod.†ó°ñ†ó°ñ°dONLNd    6"`.›*JNote: DoSetUpApp, and DoCloseApp() make specific calls to DoFiles() within†ó°ñ°dONLNd    Å.`:›* Jthe Standard SPEC S&L QuickLook framework. Dofiles is the only task within†ó°ñ°dONLNd    Ã:`F÷* Qthe Standard File libraries not contained in StandardFile.Lib. It is contained in†ó°ñ°dONLNd
  2624. F`R°* DoTasks.Lib.†óˇ|◊#ˇ ˇˇˇˇ#◊°ñ 
  2625. _,Times
  2626. .ˇ°dONLNdˇˇ(⁄Z28°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ,    Monaco
  2627. °dONLNd)`6ò(R~Examples
  2628. ǰdONLNd*ò6õ)8:†ó°ñ
  2629.     °dONLNd
  2630. 6`AÆ(^~
  2631. • DoFiles(0);°dONLNd6ÃA¬)l)# Does nothing - DoFiles() is turned OFF †ó°ñ°dONLNdDA`LÆ(i~
  2632. • DoFiles(1);°dONLNdRAÃLz)l# All of the file tests below†ó°ñ°dONLNdqL`WÆ(t~
  2633. • DoFiles(2);°dONLNdLÃWû)l## Save a File, close it, reopen it.†ó°ñ°dONLNd£W`bÆ(~
  2634. • DoFiles(4);†ó°ñ†ó°ñ°dONLNd≤mmx…+
  2635. :# Select Save As, Cancel, Save with a unique name, Save As†ó°ñ°dONLNdÌxvÉ“+     :with the same filename (replace the existing one), Save as†ó°ñ°dONLNd(Évé‰* =with the same name (add file name extension to generate a new†ó°ñ°dONLNdfévôö* file).†ó°ñ†ó°ñ°dONLNdm§`ØÆ(Ã~
  2636. • DoFiles(5);°dONLNd{§ÃØ∞)l&# Select Save As, Cancel, select Save.†ó°ñ†ó°ñ†ó°ñ
  2637. °dONLNd¢«<‘f(Zinteger°dONLNd™«m‘ó)1SaveAsÅİdONLNd∞«ó‘œ)*4( pNameDoc, pReplaceFlag, pSelectSaveAs, pPathlist )†ó°ñ†ó°ñ
  2638. °dONLNdÊfl`Î◊(~OSaveAs() provides the ability to navigate through Standard File and save files.†ó°ñ°dONLNd6Î`˜√* LThis routine allows the scriptwriter to specify whether or not to replace an†ó°ñ°dONLNdɘ`Î* Rexisting file with the same name. The <Pathlist> parameter should be specified  as†ó°ñ°dONLNd÷`Ñ* Aa full pathlist, with the name of the drive as the first element.†ó°ñ†ó°ñ
  2639. °dONLNd`(ò*Examples
  2640. ǰdONLNd ò(õ)8:†ó°ñ
  2641.     °dONLNd"(`3¢(P~ • SaveAs();†ó°ñ†ó°ñ°dONLNd1>mI√+
  2642. 9# Verifies a Standard File dialog is present, generates a†ó°ñ°dONLNdkIvTÃ+     9filename based on the current application and the time of†ó°ñ°dONLNd•Tv_Ó* day, saves the file.†ó°ñ†ó°ñ°dONLNd∫j`u‰(í~• SaveAs("myFile", 0);†ó°ñ†ó°ñ°dONLNd“Ämã…+
  2643. :# Will not select the 'Save As' menu item (but will verify†ó°ñ°dONLNd
  2644. ãvñÿ+     ;that Standard File is present), name the file 'myFile', and†ó°ñ°dONLNdIñv°fi* <if a file with  the same name exists a new file name will be†ó°ñ°dONLNdܰv¨¥* 5generated. The new file name is based on the existing†ó°ñ°dONLNdº¨v∑`* 'filename appended with the time of day.†ó°ñ†ó°ñ°dONLNdÁ¬`Õˆ(Í~• SaveAs("myFile", 1, 1);†ó°ñ†ó°ñ°dONLNdÿm„€+
  2645. =# Select the 'Save As' menu item, name the file 'myFile', and†ó°ñ°dONLNd@„vÓñ+     0replace a file with the same name if one exists.†ó°ñ†ó°ñ°dONLNds˘`h(!~,• SaveAs("myFile", 1, 0, {"HD", "Folder1"});†ó°ñ†ó°ñ°dONLNd°m√+
  2646. 9# Checks to verify that Standard file is already present,†ó°ñ°dONLNd€v%ÿ+     ;navigate to the specified path, name the file 'myFile', and†ó°ñ°dONLNd%v0ñ* 0replace a file with the same name if one exists.†ó°ñ†ó°ñ
  2647. °dONLNdI;<Hf(dZinteger°dONLNdQ;mH•)1OpenFileǰdONLNdY;•H◊)83( pNameDoc, pSelectOpen, pPathList, pPartialPath, )†ó°ñ†ó°ñ
  2648. °dONLNdéS`_·({~QOpenFile() provides the ability to navigate through Standard File and open files.†ó°ñ°dONLNd‡_`k„* RThe <Pathlist> parameter should be specified  as a full pathlist, with the name of†ó°ñ°dONLNd3k`wÕ* Qthe drive as the first element. This is true unless the <PartialPath> flag is set†ó°ñ°dONLNdÖw`É”* Lindicating that navigation should begin from the current directory downward.†ó°ñ†óˇ`◊#ˇ ˇˇˇˇ#◊°ñ 
  2649. _,Times
  2650. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛29†ó°ñ,    Monaco
  2651. °dONLNd)`6ò(R~Examples
  2652. ǰdONLNd*ò6õ)8:†ó°ñ
  2653.     °dONLNd
  2654. 6`Afi(^~• OpenFile("myFile");†ó°ñ†ó°ñ°dONLNd!LmW’+
  2655. <# Selects the 'Open' menu item, types "myFile" to select the†ó°ñ°dONLNd^Wvb∫+     6desired file, and presses the return key to open, then†ó°ñ°dONLNdïbvmx* +verifies that 'myFile' was opened properly.†ó°ñ†ó°ñ°dONLNd¡x`É(†~• OpenFile("myFile", 2);†ó°ñ†ó°ñ°dONLNd⁄émôœ+
  2656. ;# Presses the keyboard equivalent Command-'o' to select the†ó°ñ°dONLNdôv§fi+     <'Open' menu item, types "myFile" to select the desired file,†ó°ñ°dONLNdS§vØ∫* 6and presses the return key to open, then verifies that†ó°ñ°dONLNdäØv∫$* 'myFile' was opened properly.†ó°ñ†ó°ñ°dONLNd®≈`–V(Ì~)• OpenFile("myFile",1,{"HD", "Folder1"});†ó°ñ†ó°ñ°dONLNd”€mÊ’+
  2657. <# Selects the 'Open' menu item, selects the 'DeskTop' button†ó°ñ°dONLNdÊvÒ“+     :and navigates the specified path, types "myFile" to select†ó°ñ°dONLNdKÒv¸ÿ* ;the desired  file, and presses the return key to open, then†ó°ñ°dONLNdá¸vx* +verifies that 'myFile' was opened properly.†ó°ñ†ó°ñ†ó°ñ°dONLNd≥`(»(E~<• OpenFile("myFile",1,{"myDataFolder", "ThisWeeksData"}, 1);†ó°ñ†ó°ñ°dONLNd3m>€+
  2658. =# Selects the 'Open' menu item, navigates the specified path,†ó°ñ°dONLNd.>vI“+     :types "myFile" to select the desired file, and presses the†ó°ñ°dONLNdiIvT“* :return key to open, then verifies that 'myFile' was opened†ó°ñ°dONLNd§Tv_¨*     properly.†ó°ñ†ó°ñ†ó°ñ
  2659. °dONLNdÆw<Ñf(†Zinteger°dONLNd∂wmÑó)1RevertÅİdONLNdºwóÑÂ)*
  2660. ( pRevertMI )†ó°ñ†ó°ñ
  2661. °dONLNdÀè`õΔ(∑~LThis task will attempt to revert the current document back to the last saved†ó°ñ°dONLNdõ`ßfl* Pversion by selecting any menu item that contains the word "Revert". It will then†ó°ñ°dONLNdiß`≥Ë* Rattempt to dismiss any confirmation dialog that appears. If RevertMI is defined as†ó°ñ°dONLNdº≥`øÂ* Pthe menuItem for revert, it will be selected. Otherwise a menuItem with the word†ó°ñ°dONLNd
  2662. ø`ÀÁ* T'Revert' in it will be selected. A dialog will normally appear confirming the revert†ó°ñ°dONLNdbÀ`◊—* Lrequest. Several methods will be used when attempting to dismiss the dialog.†ó°ñ°dONLNdØ◊`„Œ* JAttempts to match buttons "OK", "Yes", "Revert", are made, then typing the†ó°ñ°dONLNd˙„`ÔÍ* Sreturn key. If RevertMi is defined, then DialogCheck() will be called to output the†ó°ñ°dONLNdNÔ`˚S* 6static text in the dialog and the type the return key.†ó°ñ†ó°ñ
  2663. °dONLNdÖ`ò*Examples
  2664. ǰdONLNdçòõ)8:†ó°ñ
  2665.     °dONLNdè`¢(<~ • Revert();†ó°ñ†ó°ñ†ó°ñ
  2666. °dONLNdõ7<Df(`Zinteger°dONLNd£7mDœ)1IsStandardFileÉİdONLNd±7œD )b
  2667. ( pLogIt )†ó°ñ†ó°ñ
  2668. °dONLNdΩO`[÷(w~SThis task checks to see if a Standard File dialog is present and returns 1 if it is†ó°ñ°dONLNd[`g◊* Tpresent and 0 if it is not. All of the routines in the Standard Files Libraries call†ó°ñ°dONLNdfg`s‰* Uthis task to determine if Standard File is present. Since it is possible to customize†ó°ñ°dONLNdºs`Í* YStandard File it is difficult to find a descriptor that will insure that Standard File is†ó°ñ°dONLNd`ãÆ* actually present.†ó°ñ†óˇ“◊#ˇ ˇˇˇˇ#◊°ñ 
  2669. _,Times
  2670. .ˇ°dONLNdˇˇ(⁄Z30°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ,    Monaco
  2671. °dONLNd)`6ò(R~Examples
  2672. ǰdONLNd*ò6õ)8:†ó°ñ
  2673.     °dONLNd
  2674. 6`A“(^~• IsStandardFile();†ó°ñ†ó°ñ†ó°ñ
  2675. °dONLNdY<ff(ÇZinteger°dONLNd&YmfÎ)1CancelStandardFileÑİdONLNd8YÎfç)~( pHowCancel, pSaveAsMenu )†ó°ñ†ó°ñ
  2676. °dONLNdUq`}Ÿ(ô~QThis tasks selects cancel for the Standard File dialog. The main reason this is a†ó°ñ°dONLNdß}`âÁ* Rtask provided by Standard File library  is that is a common test case for the SPEC†ó°ñ°dONLNd˙â`ï·* S&L Standard QuickLook.†ó°ñ†ó°ñ
  2677. °dONLNd°`Æò*Examples
  2678. ǰdONLNd¢òÆõ)8:†ó°ñ
  2679.     °dONLNdÆ`πÍ(÷~• CancelStandardFile();†ó°ñ†ó°ñ°dONLNd5ƒ`œ™*7# Presses the keyboard equivalent Command-'.' to cancel†ó°ñ†ó°ñ°dONLNdm⁄`Â*• CancelStandardFile(1);°dONLNdÜ⁄¬)¥# Selects the 'Cancel' button†ó°ñ†ó°ñ†ó°ñ
  2680. °dONLNd§˝<
  2681. T(&Znada°dONLNd©˝m
  2682. â)1SaveŰdONLNd≠˝â
  2683. „)( pSaveMethod )†ó°ñ†ó°ñ
  2684. °dONLNdæ`!∫(=~JThis task selects the 'Save' menu item. If a Standard File dialog appears,†ó°ñ°dONLNd    !`-Â* Sindicating the file has not been saved previously, the task SaveAs() is called. The†ó°ñ°dONLNd]-`9fi* Qmain reason this is a task provided by Standard File library  is that is a common†ó°ñ°dONLNdØ9`ES* /test case for the SPEC S&L Standard QuickLooks.†ó°ñ†ó°ñ
  2685. °dONLNdflQ`^ò*Examples
  2686. ǰdONLNdÁRò^õ)8:†ó°ñ
  2687.     °dONLNdÈ^`iñ(Ü~    • Save();†ó°ñ†óˇÜ◊#ˇ ˇˇˇˇ#◊°ñ 
  2688. _,Times
  2689. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛31†ó°ñ,     Helvetica
  2690. °dONLNd6<HÕ(cZExercising Fonts TXT
  2691.  gXg
  2692. †ó°ñ†ó°ñ
  2693. °dONLNd\<h⁄*!XThe 'Font.Lib' contains VU code for exercising fonts, styles, and sizes. There are three†ó°ñ°dONLNdjh<t€* Umodes of font testing currently defined. These can be executed by calling DoText with†ó°ñ°dONLNd¿t<ÄÂ* [certain global variables set appropriately. The following section details the proper global†ó°ñ°dONLNdÄ<åº* Qsettings to execute the various test methods. All of the methods are based on the†ó°ñ°dONLNdnå<òÊ* Texecution of a FontRecord which  consists of three elements {"FontName", "SizeName",†ó°ñ°dONLNd√ò<§≤* O{StyleList}};  For example: ourFontRecord := {'Geneva','12',{'Bold','Italic'}};†ó°ñ†ó°ñ†ó°ñ
  2694. °dONLNd¬<—*,Font Related Global Variables†ó°ñ†ó°ñ
  2695. °dONLNd2‹<ËØ*PIn order to execute any of the font testing methods there are a series of global†ó°ñ°dONLNdÉË<Ù9* 7variables that must be defined in the task InitFonts().†ó°ñ†ó°ñ°dONLNdº` ú+$@NOTE:  These global variables are actually used as constants. We†ó°ñ°dONLNd˝ `±* Ihave defined default settings for these global variables in Fonts.Lib. If†ó°ñ°dONLNdG`$ï* Bthe script that you are developing requires changes to the default†ó°ñ°dONLNdä$`0õ* Avalues these should be made by overriding them within the script.†ó°ñ†ó°ñ°dONLNdÕ<<Hü(dZMAll font characteristics are generated from the predefined global font lists:†ó°ñ°dONLNdH<Tm*     gFontList~°dONLNd$HnTt)2, ~°dONLNd&HtT∫)
  2696. gFontSizeList$@°dONLNd3HªT¡)G, $@°dONLNd5H¡T )gFontStyleListu@°dONLNdCH T|)K. Define these lists with†ó°ñ°dONLNd]T<`å(|ZHappropriate Fonts, Sizes and Styles. These are the first block of global†ó°ñ°dONLNd¶`<l¨* variables in InitFonts().†ó°ñ†ó°ñ°dONLNd¿x<Ñ@*4DO NOT define the second block of global variables (cİdONLNdÙxAÑñ(†_
  2697. gCurrFontMenu]°dONLNdxóÑö)V,†ó°ñ°dONLNdÑ<êé(¨Z
  2698. gCurrSizeMenu#@°dONLNdÑèêï)S, #@°dONLNdÑïêÏ)gCurrStyleMenuq@°dONLNd ÑÏêÖ)W!). These global variables will be†ó°ñ°dONLNdBê<ú°(∏ZKautomatically defined. They store the titles to the menus which contain the†ó°ñ°dONLNdéú<®œ* font characteristic menu items.†ó°ñ†ó°ñ°dONLNdÆ¥<¿r* The global &İdONLNdπ¥s¿¨)7 gPlainStyle$¿°dONLNdƒ¥≠¿®):4 should be defined as the menu item which clears all†ó°ñ°dONLNd˘¿<Ãp(ËZ font styles.†ó°ñ†ó°ñ°dONLNdÿ<‰r* The global &İdONLNdÿs‰–)7gNextLineMethodtİdONLNd ÿ–‰ß)], should be defined as the appropriate method†ó°ñ°dONLNdM‰<Æ( ZPwhich a particular application requires to be prepared to enter the next line of†ó°ñ°dONLNdû<¸P* text.†ó°ñ°dONLNd•¸<O* ;This global should be set to one of the following settings:†ó°ñ,    Monaco
  2699. °dONLNd·`Æ+$
  2700.  
  2701. 1 - ReturnKey†ó°ñ°dONLNdÔ`!Æ*
  2702. 2 - Enter Key†ó°ñ°dONLNd˝ `-Ã* 3 - Down Arrow Key†ó°ñ°dONLNd,`9¢* 4 - Tab Key†ó°ñ°dONLNd8`E∞* 8{<Optional Specifier>} - if no specifier will select the†ó°ñ°dONLNdUD`Qt* .first document window with close and grow box.†ó°ñ†ó°ñ
  2703. °dONLNdÖ\`h\*/See Appendix G for more info on gNextLineMethod†ó°ñ†ó°ñ°dONLNdµw<Ér(üZ The global &İdONLNd¿wsÉ
  2704. )7gNextLineClearsFontSettingso°dONLNd€w
  2705. ɨ)ó# should be set to a 1 if the method†ó°ñ°dONLNdˇÉ<è≥(´ZTof moving to the next line of text clears all the font settings. It should be set to†óˇ    j◊#ˇ ˇˇˇˇ#◊°ñ 
  2706. _,Times
  2707. .ˇ°dONLNdˇˇ(⁄Z32°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)<5†(QZP0 if moving to the next line retains the font settings - ( important if the test†ó°ñ°dONLNdQ5<A±* method is 3 - see below)†ó°ñ†ó°ñ,     Helvetica
  2708. °dONLNdjS<bñ*  Test Methods†ó°ñ°dONLNdwa`p◊+$• Random method - 1†ó°ñ
  2709. °dONLNdãpr|É+ 81) Set gFontMethod to 1. (i.e. global gFontMethod := 1;)†ó°ñ°dONLNdƒ|rà‹* F2) Set gNumRandomFontTests to equal the number of random text records.†ó°ñ°dONLNd àrîæ* B(i.e. global gNumRandomFontTests := 5;)  For 5 random text records†ó°ñ°dONLNdOîr†≈* 3) Call DoText();†ó°ñ†ó°ñ°dONLNda¨r∏…*E- The FontRecord generated will include a random Font, a random size,†ó°ñ°dONLNdß∏rƒ0* %and a random number of random styles.†ó°ñ†ó°ñ
  2710. °dONLNdÕ–`flË(˚~• QuickLook method - 2†ó°ñ
  2711. °dONLNd‰flrÎÉ+ 81) Set gFontMethod to 2. (i.e. global gFontMethod := 2;)†ó°ñ°dONLNdÎr˜≈* 2) Call DoText();†ó°ñ†ó°ñ°dONLNd/rœ*H- This will generate 1 FontRecord for each font with a random size and a†ó°ñ°dONLNdx{ +     random combination of styles.†ó°ñ†ó°ñ
  2712. °dONLNdñ'`6Ÿ(R~• Waterfall method -3†ó°ñ
  2713. °dONLNd≠6rBÜ+ 91) Set gFontMethod to  3. (i.e. global gFontMethod := 3;)†ó°ñ°dONLNdÁBrN»* G2) Be sure the global gNextLineClearsFontSettings is set correctly (See†ó°ñ°dONLNd/NrZí* above)†ó°ñ°dONLNd6Zrf≈* 3) Call DoText();†ó°ñ†ó°ñ°dONLNdHrr~¥*C- This will generate 1 FontRecord for each font with every size and†ó°ñ°dONLNdå~räË* Ocombination of styles. For example, the first record may be {"Helvetica", '12',†ó°ñ°dONLNd‹ärñÁ* Q{'Bold'}}; and the second record might be {"Helvetica", '12', {'Bold', 'italic'}}†ó°ñ†óˇ r◊#ˇ ˇˇˇˇ#◊°ñ 
  2714. _,Times
  2715. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛33†ó°ñ,     Helvetica
  2716. °dONLNd6<H0(cZPerforming Draw Operations TXT
  2717.  gXg
  2718. †ó°ñ†ó°ñ
  2719. °dONLNdd<sú*+Using Palettes†ó°ñ
  2720. °dONLNd*r<~¡* QThis section describes the way to set up various structures to implement the draw†ó°ñ°dONLNd|~<ä≈* Tlibraries. Each application will have a unique set of tools contained within its own†ó°ñ°dONLNd—ä<ñ⁄* Wpalettes. The following sections outline the requirements for using the Draw Libraries.†ó°ñ°dONLNd)ñ<¢Ω* RSince these are unique for each application, the structure must be set up for each†ó°ñ°dONLNd|¢<Æ≠* Papplication and contained within an initialization routine for that application.†ó°ñ†ó°ñ°dONLNdÕ∫NΔº+The Palette Structure†ó°ñ†ó°ñ°dONLNd„“<fi√(˙ZVThis section describes the setup required to use the palette section of the libraries.†ó°ñ°dONLNd:fi<Í÷* XFirst you must identify which type of palette is utilized. There are three main types of†ó°ñ°dONLNdìÍ<ˆ·* [palettes that the Draw Libraries function with:  (1) Palettes that are contained within the†ó°ñ°dONLNdÔˆ<¿* Mdocument window (kPalDocWind),  (2) palettes that are contained within pop up†ó°ñ°dONLNd=<¬* Qmenus (kPopUpPal),  (3) and palettes that are contained within their own floating†ó°ñ°dONLNdè<•* windows (kPalWind).†ó°ñ†ó°ñ°dONLNd£&<2û*MOnce the type of palette is identified,  a Palette Structure must be defined.†ó°ñ°dONLNdÒ2<>ó* KNote:  Each palette type that is defined will be added to the gPaletteList.†ó°ñ†ó°ñ°dONLNd=J<V*'Example of a generic Palette Structure:†ó°ñ,    Monaco
  2721.     °dONLNdfVÑa+H global gPaletteList :=°dONLNd}Va)ê{†ó°ñ°dONLNdÅa®lÆ(âΔ{†ó°ñ°dONLNdâl®wˆ*
  2722. {Specifiers},°dONLNdôl\w)¥# Different for each type of†ó°ñ°dONLNdΩw\Çí*     # palette†ó°ñ°dONLNd…Ç®ç(™Δ PaletteType,°dONLNdÿÇ\ç∞)¥# Palette type†ó°ñ°dONLNdÈç®òP(µΔ{numElemsWide,numElemsTall},°dONLNdç\ò⁄)¥# Size of Tool matrix†ó°ñ°dONLNdò®£Δ(¿Δ{H,V}°dONLNd)ò\£‡)¥# Offset between tools†ó°ñ°dONLNdB£®ÆÆ(ÀΔ}†ó°ñ°dONLNdIÆπ +l };†óˇ| ◊#ˇ ˇˇˇˇ#◊°ñ 
  2723. _,Times
  2724. .ˇ°dONLNdˇˇ(⁄Z34°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)N5”(QlThe kPalDocWind Palette†ó°ñ†ó°ñ°dONLNdC<O„(kZZThis section describes the setup required for using (kPalDocWind) palettes. Initially this†ó°ñ°dONLNdtO<[·* Wtype of palette was defined as palettes where a part of applications document window is†ó°ñ°dONLNdÃ[<gœ* Ureserved for tools. However, this palette definition has been extended to include any†ó°ñ°dONLNd"g<sÀ* Tpalette where it is necessary to define the coordinates for the palette. kPalDocWind†ó°ñ°dONLNdws<È* Xpalettes can be defined relative to the applications document window, a separate window,†ó°ñ°dONLNd–<ã‹* Vor in global coordinates. MacDraw Pro utilizes a kPalDocWind, which is relative to its†ó°ñ°dONLNd'ã<ó* -document window,  for its main drawing tools.†ó°ñ†ó°ñ°dONLNdU£<Ø?* °dONLNdV£?ØV)Note{İdONLNdZ£WØ‹)R:  Tools contained within palettes of this type must be the same size and the same†ó°ñ°dONLNd≠Ø<ªÅ(◊Zdistance apart.†ó°ñ
  2725. °dONLNdΩª›ŒI+° kPalDocWind†ó°ñ
  2726. °dONLNd…ÕπŸl(ı◊'Palette that is defined by coordinates.†ó°ñ†ó°ñ°ddPro†Ç†å
  2727. ZòÅHH|ˇ oÄġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇ ÃÃˇˇÃÀ ôôÊgˇˇ ˇˇLÕƒG ˇˇÈìLÕ ˇˇ¿ >sÃÀ ôô@ ôôôó ffff ≥3≥3≥3ˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôô ˇˇÃÀ‚  ÊeˇˇÃÀ ôôÛ3ˇˇ ˇ¸LÕˇˇ ˇˇ”3LÕ ˇˇ˛ fhÃÀ ôôfj ôôÜe ffLÕ ¶f¶f¶f(Ú◊VÑÏˇˇffˇˇ33ˇˇÃÃˇˇˇˇ ˇˇÃÀÓÓ ˇˇˇ˝ÃÀ ôôˇˇˇˇ ¶`LÕˇˇ ˇˇ¶eLÕ ˇˇ ˇÃÀ ôóôô ôôs3 ff30 ôôôôôôÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33 ˇˇÃÀˇ˛ ˇˇ˘óÃÀ ôôˇˇÊf LÕL–ˇˇ ˇˇyõLՠϡ ôúÃÀ L≈ôô ôôLàff åÃåÃåÃÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôô ÊbÃÀˇˇ ˇˇÛ1ÃÀ ôôˇˇÃ… LÕÉqˇˇ ˇˇLÕLÕ ˇˇˇ˚ ≥3ÃÀ ôô ôô&h 34ff ÄÄÄôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇ ÃÀÃÕˇˇ ˇˇÊcÃÀ ôùˇˇôô LÕ¶gˇˇ ˇˇjÆ ˇˇfl˝ ÃÀÃÀ .◊ôô ôô fffb s3s3s3ôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333 ÃÀ‹iˇˇ ˇˇŸóÃÀ ÃÕˇˇôô LÕº–ˇˇ ˇˇ™∞ ˇˇ¿ ÃÀôô LŒôô ff*¨ ffYñ ffffffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôô ÃÀÊgˇˇ ˇˇÃÀÃÀ ˇˇˇ˚ôô LÕ”9ˇˇ ˇ˚ˇˇ ˇˇdäå ÃÀfd `ôô ffDF ffLÕ YôYôYôffffôôffffff(lockMiffffff33ˇˇ ÃÀÏÕˇˇ ˇˇôôƒE(ftHili LÕÈöˇˇ ¯ˇˇ ˇˇ@     ÃÀ s5ôô fbff ff30ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ33 ÃÀÛ3ˇˇ ˇˇôô›fl ˇˇÛ/ôô LÕˇˇˇˇ ˇˇ ˇˇ fhÃÀ Ügôô 30ff ffò LÕLÕLÕ33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô ÃÀ˘ôˇˇ ˇ˚ôôˇˇ ˇˇÊfôô LÕˇˇ”. Nˇˇ ÃÀUX ÃÀû ôôôô ff ff @@@33ôô33ff333333ˇˇˇˇ ÃÀˇˇˇˇ Ã…ôôˇˇ ˇˇÃ…ôô LÕˇˇ¶e Äˇˇ ÃÀàå ÃÀ≥0 ôôs3 9ff Û2Û2Û2 333333(A´T͡ôôÃÃôôôôôôffôô33 ÃÀˇˇÛ2 ôôôùˇˇ ˇˇ≥1ôô L–ˇˇLÕ †ˇˇ Ã√ÃÀ ÃÀôô ôôLà36ff ÊfÊfÊf &f&f&f333333ˇˇÃÃôôff ôô∏“ˇˇ ˇˇôôôô›› ¿ˇˇ f`ÃÀ ÃÀfd ôô @ff ŸôŸôŸô öööÓÓ››ªª™™(Ä∞ ôôܡˇ ˇˇLÕóu ¶gˇˇLÕ ‡ˇˇ ÃÀ ÃÀ35›› LŒff ÃÃÃÃÃà Õ Õ ÕwwUUDD"" ÃÀˇˇÊe ôôŸõˇˇªªªªªª ˇˇˇ¸LÕ ˇˇˇˇwwwwww ÃÀ LŒôô Yöff øˇøˇøˇä•ÅÅÂ
  2728. ŎŎÁˇ ˇÅUÅUËU ˇUŌŌȌ ˇUŌŌȌˇU˚˙ŒˆùŒÅ˙Δ˙∑Œ6ˇU˙Œù˜UÅŒæŒˇˇŒŒˇˇˆŒˇˇ˛Œˇˇ˛Œˇˇ˛ŒˇˇÛŒˇˇ˛Œ˝ˇ˜Œ=ˇU˚˙ŒùU˙ùUŒÅ˙Δ˙˙ŒˇˇŒŒˇˇˆŒˇˇ˘Œˇˇ˛ŒˇˇÛŒˇˇŒŒˇ˛Œˇˇ¯Œ@ˇU˙ŒùU˙ùUÅŒæŒˇˇŒŒˇˇŒŒ¸ˇ˛Œ˝ˇŒŒˇˇŒŒ˝ˇŒŒˇˇ˛Œ˝ˇ˝Œ¸ˇ˚Œˇˇ¯ŒRˇU˚˙ŒùU˙ùUŒÅ˙Δ˙˙Œ
  2729. ˇˇŒŒˇˇŒŒˇˇŒŒˇˇ˛Œˇˇ˛Œˇˇ˛Œˇˇ˛ŒˇˇŒŒˇˇŒŒˇˇŒŒˇˇŒŒˇˇ˚Œˇˇ¯ŒRˇU˙ŒùU˙ùUÅŒæŒ
  2730. ˇˇŒŒˇˇŒŒˇˇŒŒˇˇ˛Œˇˇ˛Œˇˇ˛Œˇˇ˛ŒˇˇŒŒˇˇŒŒˇˇŒŒˇˇŒŒˇˇ¸Œˇˇ˛Œ¸ˇŒŒOˇU˚˙ŒùU˙ùUŒÅ˙Δ˙˙Œ
  2731. ˇˇŒŒˇˇŒŒˇˇŒŒˇˇ˛Œˇˇ˛Œˇˇ˛Œˇˇ˛ŒˇˇŒŒ˚ˇŒŒˇˇŒŒˇˇ˝ŒˇˇˆŒKˇˇU˙ŒùU˙ùUÅŒæŒ
  2732. ˇˇŒŒˇˇŒŒˇˇŒŒˇˇ˛Œˇˇ˛Œˇˇ˛Œˇˇ˛ŒˇˇŒŒˇˇ˚ŒˇˇŒŒˇˇ˛ŒˇˇıŒQˇˇU˚˙ŒùU˙ùUŒÅ˙Δ˙˙Œ
  2733. ˇˇŒŒˇˇŒŒˇˇŒŒˇˇ˛Œˇˇ˛Œˇˇ˛Œˇˇ˛ŒˇˇŒŒˇˇ˛Œ ˇŒŒˇˇŒŒˇˇŒŒˇˇÙŒ?ˇˇU˙ŒùU˘ùUÅŒΩŒ˝ˇ˛ŒˇˇŒŒˇˇ˝ŒˇˇŒŒˇˇ˝ŒˇˇŒŒˇˇ˛Œ˝ˇ˝Œ¸ˇŒŒ˚ˇ¯ŒˇˇU˚˙Œù˜UŒÅ˙Δ˙∑Œ ˇˇUŌŌȌ ˇˇUŌŌȌ ˇˇÅÅËÅˇÅˇÊˇˇÈ˜ˇ˝‘ˇÅ±!ˇÈ˜ˇ˝‘ˇÓˡÈˇ˙ˇ˙ˇË–ˇDˇÈ˜ˇ˝˛ˇÚˇÍ˛ˇÓËˇÈˇÚˇˇ˚ˇÚˇˇ˚ˇÚˇˇÈˇˆˇÒˇÒ˛ˇRˇ˘˜ˇÚ˜ˇ˝˛ˇ¸ˇˇ˘ˇÍ˛ˇı¸ˇËˇÈˇÚˇˇ˚ˇÚˇˇ˚ˇÚˇˇÈˇˆˇÒˇÒ˛ˇ{ˇ˘˜ˇˇÛ˜ˇ˝˛ˇ˝ˇˇ˙ˇÍ˛ˇıˇˇˇËˇÈˇ©¸…˝ˇˇ˚ˇˇˇˇˇˇˇˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇ˙ˇ˛ˇÒˇÒ˛ˇÖˇˇ˘˜˛ˇÙ˜ˇ˝˛ˇ˝ˇˇ˙ˇÍ˛ˇıˇˇˇËˇÈˇ©©˝…˛ˇˇ˚ˇ˛ˇ˛ˇ˛ˇ˛ˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇ˚ˇˇ˛ˇ˛˙ˇ˚ˇ˛˙ˇ˚˛ˇèˇ˘˜˝ˇı˜ˇ˝˛ˇ˝ˇ˛ˇ˚ˇÍ˛ˇıˇˇˇËˇÈˇ˛©˛…˛ˇˇ˚ˇˇˇˇˇˇˇˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇ¸ˇˇ˛ˇ˛ˇ¸ˇ˚ˇ˛ˇ¸ˇ˚˛ˇéˇ˘˜¸ˇˆ˜ˇ˝˛ˇ˝ˇˇˇˇˇ˝ˇÍ˛ˇıˇˇˇËˇÈˇ˝©……˝ˇˇ˚ˇ¸ˇ˛ˇ¸ˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇ˝ˇˇ˛ˇ˛ˇ¸ˇ˚ˇ˛ˇ¸ˇ˚˛ˇíˇˇ˘˜˚ˇ˜˜ˇ˝˛ˇ˝ˇˇˇˇ˛ˇÍ˛ˇıˇˇˇËˇÈˇ¸©…¸ˇˇ˚ˇˇˇˇˇˇˇˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇ˛ˇ˛ˇ˛ˇ˛ˇ˙ˇ˛ˇ˛ˇ˙ˇ˛˛ˇïˇˇ˘˜˙ˇ¯˜ˇ˝˛ˇ˛ˇ˛ˇ˛ˇˇˇÍ˛ˇıˇˇˇËˇÈˇ˚(¸)ˇˇ˚ˇ˛ˇ˛ˇ˛ˇ˛ˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇˇ˝ˇ˛ˇ˛    ˇˇˇˇ˛ˇ˛ˇ˙ˇ˛˛ˇôˇˇ˘˜˘ˇ˘˜ˇ˝˛ˇˇ˛    ˇˇˇˇˇÍ˛ˇıˇˇˇËˇÈˇ¸(i#˝)ˇˇ˚ˇˇˇˇˇˇˇˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇˇ˝ˇ˛ˇ˛    ˇˇˇˇ˛ˇ˛ˇ˙ˇ˛˛ˇäˇ˘˜¸ˇˆ˜ˇ˝˛ˇˇ¸ˇ˛ˇˇˇÍ˛ˇı¸ˇˡÈˇ˝(ii##˛)ˇˇ˚ˇ¸ˇ˛ˇ¸ˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇ˛ˇ˛ˇ˛ˇ˛˙ˇˇ˛ˇ˛˜ˇ˛˛ˇçˇ˘˜ˇˇ˜ˇˇˆ˜ˇ˝˛ˇˇ˘˛ˇˇÍ˛ˇÙˇˇ˛ËˇÈˇ˛(˛i˛#))ˇˇ˚ˇˇˇˇˇˇˇˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇ˝ˇˇ˛ˇ˚ˇ¸ˇ˛ˇ˚˙ˇ˛˛ˇèˇ˘˜ˇ˛˜ˇˇ˜˜ˇ˝˛ˇˇ˚ˇˇˇˇÍ˛ˇÙˇˇ˛ËˇÈˇ((˝i˝#)ˇˇ˚ˇ˛ˇ˛ˇ˛ˇ˛ˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇ¸ˇˇ˛ˇ˚ˇ¸ˇ˛ˇ˚˙ˇ˛˛ˇÉˇı˜ˇˇ˜˜ˇ˝˛ˇ˛ˇ˝ˇˇˇˇÍ˛ˇÙ˛ˇ˛ËˇÈˇ(¸i¸#ˇˇ˚ˇˇˇˇˇˇˇˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇ˚ˇˇ˛ˇ˚˙ˇ˛ˇ˚˙ˇ˛˛ˇ\ˇˇÙ˜ˇˇ¯˜ˇ˝˛ˇ˝ˇˇ˛ˇ˛ˇÍ˛ˇÛˇ˝ËˇÈˇÚˇˇ˚ˇÚˇˇ˚ˇÚˇˇÈˇ˙ˇ˛ˇÒˇÒ˛ˇVˇÙ˜ˇˇ¯˜ˇ˝˛ˇ¸ˇˇ˝ˇ˛ˇÍ˛ˇÛˇ˝ËˇÈˇÚˇˇ˚ˇÚˇˇ˚ˇÚˇˇÈˇˆˇÒˇÒ˛ˇ=ˇÈ˜ˇ˝˛ˇˆˇ˛ˇÍ˛ˇ˚¯ˇ˝ËˇÈÔˇ˚Ôˇ˚ÔˇÈˇˆˇÒˇÒ˛ˇ!ˇÈ˜ˇ˝‘ˇÓˡËˇ˙ˇ˙ˇÈ–ˇˇÈ˜ˇ˝‘ˇÅ±
  2734. ŎŎÁˇ
  2735. ˇÈˇÅÅ
  2736. ˇˇÈˇÅŎıˇˆˇÅŎˆ˛ˇ˜ˇÅŎˆ˛ˇ˜ˇÅŎ˜ˇˇˇ¯ˇÅŎ˜ˇˇˇ¯ˇÅŎ¯ˇ˝ˇˇ˘ˇÅŎ¯ˇ˝ˇˇ˘ˇÅŎ˘¯ˇ˙ˇπˇ∫ˇ∫ˇŸˇˇ˘ˇ˚ˇˇ˙ˇÅŎ˙ˇ˘ˇˇ˚ˇÅŎ˚ˇˇ˘˛ˇ¸ˇÅŎ¸˝ˇ˚¸ˇ˝ˇÅÅ
  2737. ˇÈˇÅÅ
  2738. ˇÈˇÅÅ
  2739. ÁˇÅÅ
  2740. ˇÈˇÅŎˇÈˇπˇ∫ˇ∫ˇŸ
  2741. ˇÈˇÅÅ
  2742. ˇÈˇÅŎ¸ˇÔˇÅŎˇ˚ˇˇÒˇÅŎ˘ˇˇÛˇÅŎ˜ˇˇıˇÅŎıˇˇ˜ˇÅÅˇÛˇˇ˘ˇÅÅˇÒˇˇ˚ˇπˇ∫ˇ∫ˇŸˇÔˇ¸ˇÅÅ
  2743. ˇÈˇÅÅ
  2744. ˇÈˇÅÅ
  2745. ˇˇÈˇÅÅ
  2746. ˇÈˇÅÅ
  2747. ÁˇÅÅ
  2748. ˇÈˇÅÅ
  2749. ˇˇÈˇÅÅˇÈˇπˇ∫ˇ∫ˇŸˇ¸Ûˇ¸ˇÅŎ¸ˇıˇ¸ˇÅŎˇ¸ˇıˇ¸ˇÅŎ¸ˇıˇ¸ˇÅŎ¸ˇıˇ¸ˇÅŎ¸ˇıˇ¸ˇÅŎ¸ˇıˇ¸ˇÅŎ¸ˇıˇ¸ˇÅŎ¸ˇıˇ¸ˇπˇ∫ˇ∫ˇŸˇ¸Ûˇ¸ˇÅÅ
  2750. ˇÈˇÅÅ
  2751. ˇˇÈˇÅÅ
  2752. ˇÈˇÅÅ
  2753. ÁˇÅÅ
  2754. ˇÈˇÅÅ
  2755. ˇˇÈˇÅÅ
  2756. ˇÈˇÅŎ˙˜ˇ˙ˇπˇ∫ˇ∫ˇŸˇ˚ˇ˜ˇ˚ˇÅŎˇ¸ˇıˇ¸ˇÅŎ¸ˇıˇ¸ˇÅŎ¸ˇıˇ¸ˇÅŎ¸ˇıˇ¸ˇÅŎ¸ˇıˇ¸ˇÅŎ¸ˇıˇ¸ˇÅŎ˚ˇ˜ˇ˚ˇÅŎ˙˜ˇ˙ˇπˇ∫ˇ∫ˇŸ
  2757. ˇÈˇÅÅ
  2758. ˇˇÈˇÅÅ
  2759. ˇÈˇÅÅ
  2760. ÁˇÅÅ
  2761. ˇÈˇÅÅ
  2762. ˇˇÈˇÅÅ
  2763. ˇÈˇÅŎ¯˚ˇ¯ˇÅÅɡ˙ˇˇ˚ˇˇ˙ˇ¯ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˝ˇ˚ˇ˜ˇ˚ˇÅŎ¸ˇıˇ¸ˇÅŎˇ¸ˇıˇ¸ˇÅŎ¸ˇıˇ¸ˇÅŎ¸ˇıˇ¸ˇÅŎ˚ˇ˜ˇ˚ˇÅŎ˙ˇˇ˚ˇˇ˙ˇÅŎ¯˚ˇ¯ˇÅÅˇÈˇπˇ∫ˇ∫ˇŸ
  2764. ˇÈˇÅÅ
  2765. ˇÈˇÅÅ
  2766. ÁˇÅÅ
  2767. ˇÈˇÅÅ
  2768. ˇˇÈˇÅÅ
  2769. ˇÈˇÅŎ˚˝ˇÛˇÅŎ˜ˇˇıˇÅŎˇıˇˇ˜ˇπˇ∫ˇ∫ˇŸˇÛˇ¯ˇÅÅˇÚˇ˘ˇÅÅˇÒˇ˙ˇÅŎˇÒˇ˙ˇÅŎˇ˚ˇÅŎˇ˚ˇÅÅˇÔˇ¸ˇÅŎˇÔˇ¸ˇÅÅˇÈˇπˇ∫ˇ∫ˇŸ
  2770. ˇÈˇÅÅ
  2771. ÁˇÅÅ
  2772. ˇÈˇÅÅ
  2773. ˇˇÈˇÅÅ
  2774. ˇÈˇÅŎˆ˛ˇ˜ˇÅŎ¯ˇˇ˛ˇ¯ˇÅŎˇ˘ˇ¸ˇ¯ˇÅŎ˙ˇ¸ˇ˜ˇπˇ∫ˇ∫ˇŸˇ˚ˇ¸ˇ¸ˇ¸ˇÅŎˆˇ¸ˇ˚ˇÅŎ˜ˇ¸ˇ˙ˇÅŎ˜ˇ˛ˇˇ˘ˇÅŎˆ˛ˇ˜ˇÅÅ
  2775. ˇÈˇÅÅ
  2776. ˇÈˇÅÅ
  2777. ˇˇÈˇÅÅˇÈˇπˇ∫ˇ∫ˇŸ
  2778. ÁˇÅÅ
  2779. ˇÈˇÅÅ
  2780. ˇˇÈˇÅÅ
  2781. ˇÈˇÅŎ˜¯ˇ¸ˇÅŎ¯ˇ˙ˇ˚ˇÅŎ˘ˇ˙ˇ˙ˇÅŎˇ˙ˇ˙ˇ˘ˇÅŎˇ˚ˇ˙ˇ¯ˇπˇ∫ˇ∫ˇŸˇ¸ˇ˙ˇ˜ˇÅŎ¸ˇ˘ˇ¯ˇÅŎˇ¸ˇ¯ˇ˘ˇÅŎ¸ˇ˜ˇ˙ˇÅŎ¸Ùˇ˚ˇÅÅ
  2782. ˇÈˇÅÅ
  2783. ˇˇÈˇÅÅ
  2784. ˇÈˇÅÅÁˇπˇ∫ˇ∫ˇŸ
  2785. ˇÈˇÅÅ
  2786. ˇˇÈˇÅÅˇÛˇˇ˘ˇÅŎ¯˛ˇˇˇ˘ˇÅŎˇ˙ˇˇ˛ˇ˚ˇ˝ˇÅŎ˚ˇ¸ˇ¸ˇˇ˝ˇÅŎ¸ˇ¸ˇ¸ˇˇ˝ˇÅŎ˝ˇ˚ˇ˛ˇˇˇ˝ˇÅÅ⡽ˇˇˇ˛˛ˇ˝ˇ˝ˇ¯ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˝ˇ˝ˇˇˇ˜ˇ˝ˇÅŎ˝ˇÛˇ˝ˇÅŎ˝ˇÛˇ˝ˇÅŎ˝Òˇ˝ˇÅÅ
  2787. ˇÈˇÅÅ
  2788. ˇÈˇÅÅ
  2789. ˇˇÈˇÅÅ
  2790. ÁˇÅÅˇÈˇπˇ∫ˇ∫ˇŸ
  2791. ˇˇÈˇÅŎ˝Òˇ˝ˇÅŎ˝ˇÛˇ˝ˇÅŎ˝ˇÛˇ˝ˇÅŎ˝ˇÛˇ˝ˇÅŎˇ˝ˇÛˇ˝ˇÅŎ˝ˇÛˇ˝ˇÅŎˇ˝˚ˇ¯ˇ˝ˇÅÅ!ˇ¸ˇ˛ˇ¯ˇ˝ˇπˇ∫ˇ∫ˇŸˇˇ˚ˇˇ¯ˇ˝ˇÅŎ˙ˇˇ¯ˇ˝ˇÅŎˇ˘ˇˇ¯ˇ˝ˇÅŎ¯ˆˇ˝ˇÅÅ
  2792. ˇÈˇÅÅ
  2793. ˇÈˇÅÅ
  2794. ÁˇÅÅ
  2795. ˇÈˇÅŎˇÈˇπˇ∫ˇ∫ˇŸˇÚ˛ˇ˚ˇÅÅˇÛ¸ˇ¸ˇÅŎı˙ˇ¸ˇÅŎÙ˚ˇ¸ˇÅŎı˚ˇ˚ˇÅŎˆˇ˛ˇ˙ˇÅŎ˜ˇˇˇˇ˙ˇÅŎ¯ˇ˛ˇ˜ˇÅŎ˘ˇˇˇˆˇπˇ∫ˇ∫ˇŸˇ˙ˇ˛ˇıˇÅŎ˙ˇˇÙˇÅŎ˙˛ˇÛˇÅÅ
  2796. ˇÈˇÅÅ
  2797. ˇÈˇÅÅ
  2798. ÁˇÅÅ
  2799. ˇÈˇÅÅ
  2800. ˇÈˇÅÅˇÈˇπˇ∫ˇ∫ˇŸ
  2801. ˇÈˇÅÅ
  2802. ˇÈˇÅÅ
  2803. ˇÈˇÅÅ
  2804. ˇÈˇÅÅ
  2805. ˇÈˇÅÅ
  2806. ˇÈˇÅÅ
  2807. ˇÈˇÅÅ
  2808. ˇÈˇÅÅˇÈˇπˇ∫ˇ∫ˇŸ
  2809. ˇÈˇÅÅ
  2810. ˇÈˇÅÅ
  2811. ˇÈˇÅÅ
  2812. ˇÈˇÅÅ
  2813. ˇÈˇÅÅ
  2814. ˇÈˇÅÅ
  2815. ˇÈˇÅÅ
  2816. ˇÈˇÅÅˇÈˇπˇ∫ˇ∫ˇŸ
  2817. ˇÈˇÅÅ
  2818. ˇÈˇÅÅ
  2819. ˇÈˇÅÅ
  2820. ˇÈˇÅÅ
  2821. ˇÈˇÅÅ
  2822. ˇÈˇÅÅ
  2823. ˇÈˇÅÅ
  2824. ˇÈˇÅÅyˇÈˇ¯ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˝
  2825. ˇÈˇÅÅ
  2826. ˇÈˇÅÅ0âÌ®°ñ °ddPro0°öˇ±ˇz
  2827. H›Xt.ˇÆÆ°dONLNdˇˇ+    ^S¨Ä°dONLNdˇˇ)pY°dONLNdˇˇ)e¨Ä°dONLNdˇˇ)c°dONLNdˇˇ)iUİdONLNdˇˇ)fTİdONLNdˇˇ)i™°dONLNdˇˇ)e˝Ä°dONLNdˇˇ)r@°dONLNdˇˇ) @°dONLNdˇˇ)-@°dONLNdˇˇ) @°dONLNdˇˇ){”¿°dONLNdˇˇ)0”¿°dONLNdˇˇ),”¿°dONLNdˇˇ) ”¿°dONLNdˇˇ)2”¿°dONLNdˇˇ)1”¿°dONLNdˇˇ),”¿°dONLNdˇˇ) ”¿°dONLNdˇˇ)2”¿°dONLNdˇˇ)5”¿°dONLNdˇˇ),”¿°dONLNdˇˇ) ”¿°dONLNdˇˇ)2”¿°dONLNdˇˇ)2”¿°dONLNdˇˇ)8”¿°dONLNdˇˇ) ”¿°dONLNdˇˇ),”¿°dONLNdˇˇ) ”¿°dONLNdˇˇ)1”¿°dONLNdˇˇ)}†ó°ñ °ddPro$°öˇ¶ˇt
  2828. U„vo
  2829.     °dONLNdˇˇ(^ÊF`°dONLNdˇˇ)iÅİdONLNdˇˇ)rÄ¿°dONLNdˇˇ)s`°dONLNdˇˇ)tÅİdONLNdˇˇ) ¡Ä°dONLNdˇˇ) İdONLNdˇˇ)4ÅİdONLNdˇˇ) ¡Ä°dONLNdˇˇ)e¿ °dONLNdˇˇ)l@@°dONLNdˇˇ)e>‡°dONLNdˇˇ)m?°dONLNdˇˇ)e=†°dONLNdˇˇ)nΩ†°dONLNdˇˇ)t=¿°dONLNdˇˇ)sæ`°dONLNdˇˇ) ˛`°dONLNdˇˇ)a˝°dONLNdˇˇ)r¸@°dONLNdˇˇ)e˙‡°dONLNdˇˇ) :‡°dONLNdˇˇ)tª°dONLNdˇˇ)h;°dONLNdˇˇ)e9†°dONLNdˇˇ) y†°dONLNdˇˇ)cx@°dONLNdˇˇ)o¯@°dONLNdˇˇ)ox@°dONLNdˇˇ)rwİdONLNdˇˇ)d˜Ä°dONLNdˇˇ)iw†°dONLNdˇˇ)n˜†°dONLNdˇˇ)aˆ@°dONLNdˇˇ)tv`°dONLNdˇˇ)eu°dONLNdˇˇ)sı†°dONLNdˇˇ) °ddPro$°dONLNdˇˇ(hÊfˇ@°dONLNdˇˇ)o@°dONLNdˇˇ)r~İdONLNdˇˇ) æÄ°dONLNdˇˇ)t>†°dONLNdˇˇ)h憰dONLNdˇˇ)eΩ@°dONLNdˇˇ) ˝@°dONLNdˇˇ)r¸Ä°dONLNdˇˇ)e˚ °dONLNdˇˇ)t{@°dONLNdˇˇ)ay‡°dONLNdˇˇ)n˘‡°dONLNdˇˇ)gy‡°dONLNdˇˇ)l˙°dONLNdˇˇ)e¯†°dONLNdˇˇ) 8†°dONLNdˇˇ)w∏İdONLNdˇˇ)h8İdONLNdˇˇ)i∏†°dONLNdˇˇ)c∑@°dONLNdˇˇ)h7@°dONLNdˇˇ) w@°dONLNdˇˇ)d˜@°dONLNdˇˇ)eı‡°dONLNdˇˇ)fı °dONLNdˇˇ)iu@°dONLNdˇˇ)nı@°dONLNdˇˇ)eÛ‡°dONLNdˇˇ)stİdONLNdˇˇ) ¥Ä°dONLNdˇˇ)t4†°dONLNdˇˇ)h¥†°dONLNdˇˇ)e≥@°dONLNdˇˇ) °ddPro$°dONLNdˇˇ(rÊp°dONLNdˇˇ)a~†°dONLNdˇˇ)l˛¿°dONLNdˇˇ)e˝`°dONLNdˇˇ)t}İdONLNdˇˇ)t˝†°dONLNdˇˇ)e¸@°dONLNdˇˇ).†ó°ñ °ddPro0°öˇÏ
  2830. 
  2831. ZÜ
  2832. °dONLNdˇˇ(Z(°dONLNdˇˇ) °dONLNdˇˇ) °dONLNdˇˇ)0°dONLNdˇˇ),°dONLNdˇˇ) °dONLNdˇˇ)2°dONLNdˇˇ)1°dONLNdˇˇ) °dONLNdˇˇ))†ó†å†å††°§Ï
  2833. "fl]###%#†£
  2834. Z"fl]#%†°††°§Ï
  2835. "‡i# ###†£
  2836. Z"‡i #†°°ñ °ddPro$°öˇ˛“
  2837. ÁÖÙ¸
  2838.     °dONLNdˇˇ(àNˇ‡°dONLNdˇˇ)u‡°dONLNdˇˇ)m°dONLNdˇˇ)b°dONLNdˇˇ)e˛†°dONLNdˇˇ)r˝‡°dONLNdˇˇ) =‡°dONLNdˇˇ)oΩ‡°dONLNdˇˇ)fΩ °dONLNdˇˇ) °ddPro$˝ °dONLNdˇˇ)V}°dONLNdˇˇ)E}¿°dONLNdˇˇ)R≠0°dONLNdˇˇ)T≠°dONLNdˇˇ)I.ê°dONLNdˇˇ)CÆp°dONLNdˇˇ)A.P°dONLNdˇˇ)L°ddPro$/°dONLNdˇˇ) o°dONLNdˇˇ)pÔ°dONLNdˇˇ)io0°dONLNdˇˇ)xÔ0°dONLNdˇˇ)eÌ–°dONLNdˇˇ)lm°dONLNdˇˇ)s†ó°ñ °ddPro$°öˇ˛“
  2839. ıÖ°dONLNdˇˇ(˛àNˇ‡°dONLNdˇˇ)u‡°dONLNdˇˇ)m°dONLNdˇˇ)b°dONLNdˇˇ)e˛†°dONLNdˇˇ)r˝‡°dONLNdˇˇ) =‡°dONLNdˇˇ)oΩ‡°dONLNdˇˇ)fΩ °dONLNdˇˇ) °ddPro$˝ °dONLNdˇˇ)H˝@°dONLNdˇˇ)O˝`°dONLNdˇˇ)R}@°dONLNdˇˇ)I˝‡°dONLNdˇˇ)Z˛†°dONLNdˇˇ)O˛¿°dONLNdˇˇ)N~†°dONLNdˇˇ)T‘°dONLNdˇˇ)AT–°dONLNdˇˇ)L°ddPro$Uê°dONLNdˇˇ) ïê°dONLNdˇˇ)pê°dONLNdˇˇ)iï∞°dONLNdˇˇ)x∞°dONLNdˇˇ)eP°dONLNdˇˇ)lîp°dONLNdˇˇ)s†ó†ç†å°ñ °ddPro0°öˇ'ˇy
  2840. “fi·z
  2841. °dONLNdˇˇ(›·OUİdONLNdˇˇ)    fTİdONLNdˇˇ)fSİdONLNdˇˇ)sˇ°dONLNdˇˇ)eRİdONLNdˇˇ)tQİdONLNdˇˇ) QİdONLNdˇˇ)b˛°dONLNdˇˇ)eQİdONLNdˇˇ)tPİdONLNdˇˇ)w˚°dONLNdˇˇ)eNİdONLNdˇˇ)e¢°dONLNdˇˇ)nNİdONLNdˇˇ) ¿°dONLNdˇˇ)T˛¿°dONLNdˇˇ)o˛¿°dONLNdˇˇ)o˛¿°dONLNdˇˇ)lT@°dONLNdˇˇ)sˇ¿°dONLNdˇˇ) ˇ¿°dONLNdˇˇ)-˛¿°dONLNdˇˇ) ˛¿°dONLNdˇˇ){π@°dONLNdˇˇ)0π@°dONLNdˇˇ),π@°dONLNdˇˇ)1π@°dONLNdˇˇ)7π@°dONLNdˇˇ)}†ó°ñ °ddPro$°öˇˇu
  2842. fl‚M
  2843.     °dONLNdˇˇ(ËÂS`°dONLNdˇˇ)iÅİdONLNdˇˇ)nİdONLNdˇˇ)c °dONLNdˇˇ)e˛¿°dONLNdˇˇ) >¿°dONLNdˇˇ)t懰dONLNdˇˇ)h>‡°dONLNdˇˇ)e=İdONLNdˇˇ)r<¿°dONLNdˇˇ)e;`°dONLNdˇˇ) {`°dONLNdˇˇ)i˚İdONLNdˇˇ)s| °dONLNdˇˇ) º °dONLNdˇˇ)o< °dONLNdˇˇ)nº °dONLNdˇˇ)l<@°dONLNdˇˇ)yº@°dONLNdˇˇ) ¸@°dONLNdˇˇ)1|@°dONLNdˇˇ) º@°dONLNdˇˇ)t<`°dONLNdˇˇ)oº`°dONLNdˇˇ)o<`°dONLNdˇˇ)lºÄ°dONLNdˇˇ) °ddPro$°dONLNdˇˇ(ÚÂa˛†°dONLNdˇˇ)c˝@°dONLNdˇˇ)r¸Ä°dONLNdˇˇ)o|İdONLNdˇˇ)s˝ °dONLNdˇˇ)s}¿°dONLNdˇˇ) Ω¿°dONLNdˇˇ)t=‡°dONLNdˇˇ)hΩ‡°dONLNdˇˇ)eºÄ°dONLNdˇˇ) ¸Ä°dONLNdˇˇ)d|İdONLNdˇˇ)i¸†°dONLNdˇˇ)s}@°dONLNdˇˇ)t˝`°dONLNdˇˇ)a¸°dONLNdˇˇ)n|°dONLNdˇˇ)cz†°dONLNdˇˇ)ey@°dONLNdˇˇ) π@°dONLNdˇˇ)b9@°dONLNdˇˇ)e7‡°dONLNdˇˇ)t∏°dONLNdˇˇ)w7‡°dONLNdˇˇ)e6İdONLNdˇˇ)e5 °dONLNdˇˇ)nµ °dONLNdˇˇ) °ddPro$°dONLNdˇˇ(¸Âh°dONLNdˇˇ)o°dONLNdˇˇ)rˇ@°dONLNdˇˇ)i`°dONLNdˇˇ)z~°dONLNdˇˇ)o˛°dONLNdˇˇ)n~°dONLNdˇˇ)t˛ °dONLNdˇˇ)a¸¿°dONLNdˇˇ)l|‡°dONLNdˇˇ) º‡°dONLNdˇˇ)t=°dONLNdˇˇ)oΩ°dONLNdˇˇ)o=°dONLNdˇˇ)lΩ °dONLNdˇˇ)s=¿°dONLNdˇˇ) }¿°dONLNdˇˇ)i˝‡°dONLNdˇˇ)s~İdONLNdˇˇ) æÄ°dONLNdˇˇ)0>İdONLNdˇˇ).†ó†ç†ç†å††°§P
  2844. "øö###
  2845. ##Ê#†£
  2846. Z"æô#
  2847. #ʆ°††°§P
  2848. "≈¥#d###†£
  2849. Z"≈¥d#†°†ç°ñ °ddPro0°öˇˇ≤
  2850. Ε˚›
  2851. °dONLNdˇˇ(ˆ®(°dONLNdˇˇ) °dONLNdˇˇ)2°dONLNdˇˇ)5°dONLNdˇˇ),°dONLNdˇˇ) °dONLNdˇˇ)2°dONLNdˇˇ)2°dONLNdˇˇ)8°dONLNdˇˇ) °dONLNdˇˇ))†ó†å†å°ñ °ddPro$°öˇeˇv
  2852. ñ·¨&
  2853.     °dONLNdˇˇ(ü‰ @°dONLNdˇˇ)1¿°dONLNdˇˇ) °dONLNdˇˇ) @°dONLNdˇˇ)-?@°dONLNdˇˇ) V0°dONLNdˇˇ)T4∞°dONLNdˇˇ)o¥∞°dONLNdˇˇ)o4∞°dONLNdˇˇ)l¥–°dONLNdˇˇ) v@°dONLNdˇˇ)Aˆ °dONLNdˇˇ)cÙ¿°dONLNdˇˇ)rÙ°dONLNdˇˇ)ot°dONLNdˇˇ)sÙ†°dONLNdˇˇ)su@)
  2854. °ddPro$°dONLNdˇˇ(©‰1°dONLNdˇˇ)2°dONLNdˇˇ) @°dONLNdˇˇ)-?@°dONLNdˇˇ) V0°dONLNdˇˇ)T4∞°dONLNdˇˇ)o¥∞°dONLNdˇˇ)o4∞°dONLNdˇˇ)l¥–°dONLNdˇˇ)s5p°dONLNdˇˇ) up°dONLNdˇˇ)DıP°dONLNdˇˇ)ouP°dONLNdˇˇ)wı0°dONLNdˇˇ)nu0°dONLNdˇˇ) †ó°ñ °ddPro0°öˇoˇz
  2855. ä›ôV
  2856. °dONLNdˇˇ(ï‡S¨Ä°dONLNdˇˇ)i°dONLNdˇˇ)zUİdONLNdˇˇ)e©°dONLNdˇˇ) ©°dONLNdˇˇ)o©°dONLNdˇˇ)f®°dONLNdˇˇ) ®°dONLNdˇˇ)M˚İdONLNdˇˇ) a˚İdONLNdˇˇ)t˙İdONLNdˇˇ)rN°dONLNdˇˇ)i£Ä°dONLNdˇˇ)x£Ä°dONLNdˇˇ) £Ä°dONLNdˇˇ)-¢Ä°dONLNdˇˇ) ¢Ä°dONLNdˇˇ){]°dONLNdˇˇ)1]°dONLNdˇˇ),]°dONLNdˇˇ)1]°dONLNdˇˇ)2]°dONLNdˇˇ)}†ó†ç†å††°§o
  2857. "ô:###%#†£
  2858. Z"ô:#%†°††°§o
  2859. "öF# ###†£
  2860. Z"öF #†°°ñ °ddPro$°öˇZ˛ı
  2861. °bÆœ
  2862.     ·°dONLNdˇˇ+Na–°dONLNdˇˇ)u·–°dONLNdˇˇ)m·°dONLNdˇˇ)ba°dONLNdˇˇ)e`ê°dONLNdˇˇ)r_–°dONLNdˇˇ) ü–°dONLNdˇˇ)o–°dONLNdˇˇ)f°dONLNdˇˇ) _°dONLNdˇˇ) ü°dONLNdˇˇ)eù∞°dONLNdˇˇ)l–°dONLNdˇˇ)ep°dONLNdˇˇ)mê°dONLNdˇˇ)e°dONLNdˇˇ)nõ0°dONLNdˇˇ)tP°dONLNdˇˇ)sõ°dONLNdˇˇ) °ddPro$€°dONLNdˇˇ)T2@°dONLNdˇˇ)A≤ °dONLNdˇˇ)L≤‡°dONLNdˇˇ)L†ó°ñ °ddPro$°öˇL˛ı
  2863. ØbºŸ·°dONLNdˇˇ(∏eNa–°dONLNdˇˇ)u·–°dONLNdˇˇ)m·°dONLNdˇˇ)ba°dONLNdˇˇ)e`ê°dONLNdˇˇ)r_–°dONLNdˇˇ) ü–°dONLNdˇˇ)o–°dONLNdˇˇ)f°dONLNdˇˇ) _°dONLNdˇˇ) ü°dONLNdˇˇ)o°dONLNdˇˇ)fP°dONLNdˇˇ) ^P°dONLNdˇˇ)e\°dONLNdˇˇ)l›°dONLNdˇˇ)e€∞°dONLNdˇˇ)m€–°dONLNdˇˇ)e⁄p°dONLNdˇˇ)nZp°dONLNdˇˇ)t⁄ê°dONLNdˇˇ)s[0°dONLNdˇˇ) °ddPro$õ0°dONLNdˇˇ)Wõ0°dONLNdˇˇ)    I–°dONLNdˇˇ)Dõ∞°dONLNdˇˇ)E†ó†ç†ç††°§P
  2864. "Xi#
  2865. ###†£
  2866. Z"Xi
  2867. #†°°ñ °ddPro$°öˇû˛œ
  2868. ]àí¿°dONLNdˇˇ(fãRİdONLNdˇˇ)e °dONLNdˇˇ)lë@°dONLNdˇˇ)a臰dONLNdˇˇ)t°dONLNdˇˇ)iê °dONLNdˇˇ)v °dONLNdˇˇ)e¿°dONLNdˇˇ) N¿°dONLNdˇˇ)IN°dONLNdˇˇ)nŒ°dONLNdˇˇ)dN°dONLNdˇˇ)iŒ °dONLNdˇˇ)cÿ°dONLNdˇˇ)aÀ`°dONLNdˇˇ)tKİdONLNdˇˇ)oÀİdONLNdˇˇ)r ¿°dONLNdˇˇ) 
  2869. ¿°dONLNdˇˇ)-
  2870. °dONLNdˇˇ) J°dONLNdˇˇ)(I@°dONLNdˇˇ)o…@°dONLNdˇˇ)pI@°dONLNdˇˇ)t…`°dONLNdˇˇ)iIİdONLNdˇˇ)o…İdONLNdˇˇ)nIİdONLNdˇˇ)aH °dONLNdˇˇ)l»@°dONLNdˇˇ))«Ä)
  2871. °ddPro$¿°dONLNdˇˇ(pãI°dONLNdˇˇ)f@°dONLNdˇˇ) P@°dONLNdˇˇ)t–`°dONLNdˇˇ)hP`°dONLNdˇˇ)i–İdONLNdˇˇ)sQ °dONLNdˇˇ) ë °dONLNdˇˇ)eè¿°dONLNdˇˇ)x¿°dONLNdˇˇ)i臰dONLNdˇˇ)sİdONLNdˇˇ)tꆰdONLNdˇˇ)s@°dONLNdˇˇ),Q@°dONLNdˇˇ) ë@°dONLNdˇˇ)c臰dONLNdˇˇ)o‡°dONLNdˇˇ)o臰dONLNdˇˇ)rè °dONLNdˇˇ)d °dONLNdˇˇ)iè@°dONLNdˇˇ)n@°dONLNdˇˇ)a
  2872. ‡°dONLNdˇˇ)té°dONLNdˇˇ)e冰dONLNdˇˇ)s
  2873. @°dONLNdˇˇ) M@°dONLNdˇˇ)aK‡°dONLNdˇˇ)rK °dONLNdˇˇ)eI¿°dONLNdˇˇ) â¿)
  2874. °ddPro$¿°dONLNdˇˇ(zãr°dONLNdˇˇ)e†°dONLNdˇˇ)lè¿°dONLNdˇˇ)aé`°dONLNdˇˇ)tİdONLNdˇˇ)i醰dONLNdˇˇ)v†°dONLNdˇˇ)e
  2875. @°dONLNdˇˇ) M@°dONLNdˇˇ)tÕ`°dONLNdˇˇ)oM`°dONLNdˇˇ) ç`°dONLNdˇˇ)t
  2876. İdONLNdˇˇ)hçİdONLNdˇˇ)eå °dONLNdˇˇ) à°dONLNdˇˇ)wL°dONLNdˇˇ)ià°dONLNdˇˇ)nL °dONLNdˇˇ)dà°dONLNdˇˇ)oL °dONLNdˇˇ)wðdONLNdˇˇ)  °dONLNdˇˇ)s冰dONLNdˇˇ)p †°dONLNdˇˇ)e @°dONLNdˇˇ)c    ‡°dONLNdˇˇ)iä°dONLNdˇˇ)fâ@°dONLNdˇˇ)i    `°dONLNdˇˇ)e°dONLNdˇˇ)dà°dONLNdˇˇ) »°dONLNdˇˇ).)
  2877. °ddPro$¿°dONLNdˇˇ(ÑãA°dONLNdˇˇ) S°dONLNdˇˇ)Z“p°dONLNdˇˇ)e—°dONLNdˇˇ)r–P°dONLNdˇˇ)oPP°dONLNdˇˇ) êP°dONLNdˇˇ)ip°dONLNdˇˇ)nêp°dONLNdˇˇ)dp°dONLNdˇˇ)iêê°dONLNdˇˇ)cè0°dONLNdˇˇ)aç–°dONLNdˇˇ)t
  2878. °dONLNdˇˇ)e ê°dONLNdˇˇ)sç0°dONLNdˇˇ) Õ0°dONLNdˇˇ)tMP°dONLNdˇˇ)hÕP°dONLNdˇˇ)eÀ°dONLNdˇˇ)  °dONLNdˇˇ)f 0°dONLNdˇˇ)r
  2879. p°dONLNdˇˇ)oäp°dONLNdˇˇ)n
  2880. p°dONLNdˇˇ)täê°dONLNdˇˇ)  ê)
  2881. °ddPro$¿°dONLNdˇˇ(éãdë¿°dONLNdˇˇ)o¿°dONLNdˇˇ)c`°dONLNdˇˇ)uê`°dONLNdˇˇ)mêİdONLNdˇˇ)eè °dONLNdˇˇ)n °dONLNdˇˇ)tè@°dONLNdˇˇ) œ@°dONLNdˇˇ)wO °dONLNdˇˇ)iœ@°dONLNdˇˇ)nO@°dONLNdˇˇ)dœ@°dONLNdˇˇ)oO@°dONLNdˇˇ)w9İdONLNdˇˇ).†ó†ç†É†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ
  2882. _
  2883. .ˇ°dONLNdÚ<%∫(AZIExample of a Palette Structure with a single kPalDocWind palette defined:†ó°ñ,    Monaco
  2884.     °dONLNd=%Ñ0+H global gPaletteList :=°dONLNdT%0)ê{†ó°ñ°dONLNdX0®;Æ(XΔ{†ó°ñ°dONLNd\;®F2* { 0, 21, 25, 228, (0)},°dONLNdt;8F‡)ê# Rect that contains tools/ †ó°ñ°dONLNdóF8Q∞* # Relative indicator†ó°ñ°dONLNdÆQ®\(yΔ kPalDocWind,°dONLNdºQ8\å)ê# Palette type†ó°ñ°dONLNdÕ\®gÿ(ÑΔ{1, 12},°dONLNdÿ\8g∂)ê# Size of Tool matrix†ó°ñ°dONLNdÒg®r“(èΔ{0, 17}°dONLNd˚g8rº)ê# Offset between tools†ó°ñ°dONLNdr®}Æ(öΔ}†ó°ñ°dONLNd}à +l };†óˇ?“◊#ˇ ˇˇˇˇ#◊°ñ 
  2885. _,Times
  2886. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛35†ó°ñ°dONLNd)N5≈(QlThe kPopUpPal Palette†ó°ñ†ó°ñ°dONLNdA<MË(iZ\This section describes the setup required for using a palette that is contained within a pop†ó°ñ°dONLNdtM<Y·* Wup menu or button (kPopUpPal). This type of palette in which the tools contained in the†ó°ñ°dONLNdÃY<eÃ* Upalette are not visible until the mouse is pressed at a particular point. MacDraw Pro†ó°ñ°dONLNd"e<qH* >utilizes this type of palette for colors in its color palette.†ó°ñ†ó°ñ°dONLNda}<âS*Note{İdONLNde}TâŸ)R:  Tools contained within palettes of this type must be the same size and the same†ó°ñ°dONLNd∏â<ïÅ(±Zdistance apart.†ó°ñ†ó°ñ
  2887. °dONLNd»°Á¥?+´    kPopUpPal†ó°ñ
  2888. °dONLNd“≥πøl(€◊'Palette that is defined by coordinates.†ó°ñ°ddPro†Ç†å
  2889. fifü¸òÄ0vHH|¸–oÅġˇˇˇˇˇvigÜ‹”ˇ¯Ä“ēēø˜Íˇ¸Ûêˇˇ¯Ä@È    `Δ¿˝ê`¸ø@͡
  2890. ¸`Δ¿˛¯‡ˇˇ¯Ä@Èg«ôÊ<>¿ÒòÒ± `¸ø@͡¸fcΔff&¡ôô¡ `ˇˇ¯Ä@ÈfcΔffF|¿˘ôôá`¸ø@͡¸fcΔ~f¡ôô˘Ç@`ˇˇ¯Ä@ÈfcΔ`f¡ôôÅÇ@`¸ø@͡¸fcΔbf¡ôôâÄ`ˇˇ¯Ä@ÈΔaòf<>˛¯ÒÄ`¸ø˜Íˇ¸ˆ˝ˇˇ¯    Ä›¯Ä‹¯Ä“”ˇ¯ ƒDDC¸ˇ‡€"ëC¸ˇ‡ˇˇ˛ˇˇˇˇˇˇ˛Òˇ¯."ƒDDCÄ桡˛ˇˇÅÅÄ@˚ˇ˜wz™™ 1/ëQCÉćÛˇˇ˛ˇˇÅÅÄ@ˇˇ˜˜ÓÓ˝›’UXà."ƒdDCÑÄć3ˇˇ˛ˇˇÅ*©Å>°Ä@D˚ˇ˜wz™™ 1/ëqCÑÄć3ˇˇ˛ıÅÅ7QÄ@ƒ?ÅÔÔˇ{ªΩ›’UXà."ƒ|DCֿć3ˇˇ˛˚/Å*©Å=©ÄADA Å˚ˇ˜wz™™ 1/ë}CÜ∞ć3ˇˇ˛˝OÅAÅ>AÄBDA Åˇˇ˜˜ÓÓ˝›’UXà."ƒ~DCÑòć3ˇˇ˛ˇèÅ*©Å7±ÄDDO‚'Ò˚ˇ˜wz™™ 1/ëCàåć3ˇˇ˛ˇˇÅÅ=IÄHDI"'Ò˛˛ˇ{ªΩ›’UXà."ƒƒCëLć3ˇˇ˛„ØÅ*©Å>°ÄHDI"'Ò˚ˇ˜wz™™ 1/ë}C†åćÛˇˇ˛ÂflÅAÅ7QÄDD"?Òˇˇ˜˜ÓÓ˝›’UXà."ƒlDC†㣎ˇ˛ÎÔÅ*©Å=©ÄBD"Ò˚ˇ˜wz™™ 1/ëWCê,㣎ˇ˛ıˇÅÅ>AÄAD"ÒÔÔˇ{ªΩ›’UXà."ƒFDCàL愡ˇ˛ˇˇÅ*©Å7±Ä@ƒ‚Ò˚ˇ˜wz™™ 1/ëCÑàćCˇˇ˛ˇˇÅÅÄ@Dˇˇ˜˜ÓÓ˝›’UXà."ƒGDCÉćCˇˇ˛ˇˇÅÅÄ@˚ˇ˜wz™™ 1/ëCÄć√ˇˇ˛ˇˇÅˇˇÅˇˇÄ@˛˛ˇ{ªΩ›’UXà"ƒDDC¸ˇ‡ˇˇ˛˛ ˇˇÄˇˇÄˇˇÄÒˇ¯ ëC¸ˇ‡€”ˇ¯Ä@ÙÊ@Ä@ÙÊ@Ä@ÙÊ`Ä@Ùˡ¸`'Ä@Ùˇˇ˛˚æÔ™Í∫Æ´™Í∫Æ£à‚0@`Ä@Ù˙ˇ˝˜u’¯UDP`'Ä@ÙˇÔ˚æÆ´™Í∫Æ´™Í∫,â @@`Ä!Ä@Ù˘ˇ˝ˇw]¯UDQ`'Ä!Ä@ÙˇˇÔ˚æÎ™Í∫Æ´™Í∫Æ+à¬@`!Ä¿@˘ ˝˙ˇ›◊u]¯UDA`'Ä@¿@ÙˇÓ˚∫Ó´™Í∫Æ´™Í≤$â@@`ÄÄ`@Ù¯ˇflw›’˘UQDQ`'ÅÄp@Ùˇˇ˛˚æÔ™Í∫Æ´™Í∫Æ£à‚0@`É¿¯@Ùˡ¸`'Ä@ÙæÔ™Í∫Æ´™Ó˙æØ™Í˚æÔª˛ˇ˛ÔªÓ˚º`Ä@Ù˛ˇ˝˜u›˜ˇ¸`&˛ˇ¿ÙÆ´™Í∫Æ´™Í∫Æ´™Í∫Ø´Í˚æˇª™Íæ¨`Ä@Ù˝ˇ˝ˇÔˇ¸`+Ä@˘ ˝æÎ™Í∫Æ´™ÓªÆ´™ÓªÆÔªÓˇ˛Ô∫Ó˚º`Ä@Ù˛ˇ›◊u›Òˇ¸`'Ä@ÙÓ´™Í∫Æ´™Í∫Æ´™Í∫Æ´Æ˚æÔª™Í∫¨`Ç@Ù˚ˇ˜Ôˇ¸`'ÅÄ@ÙæÔ™Í∫Æ´™Ó˙æØ™Í˚æÔª˛ˇ˛ÔªÓ˚º`Ä`@Ùˡ¸`'Ä@Ùæ´™Í∫Æ´™Í∫Æ´™Í∫Æ´´Óˇ˛Ô™Í∫¨`#Ä@Ùˇflw˝Uu}˜u›w]fl˚ˇ˜˝ˇ¸`'ÄÄ@ÙÆ´™Í∫Æã™Í∫Æ´™Í∫Æ´™˙æÓ´™Í∫¨`#Ä`@˘ ˝ˇˇ›◊˛U›ˇ˝ˇw›˜ˆˇ¸`'Ä@ÙÆ´™Í∫Æ´™Í∫Æ´™Í∫Æ´∫Ó˚˛Ô™Í∫¨`$Ä@Ù˝›w˝U    W]◊u›w]◊u˝¸ˇw_fl¸`'Ä@ÙÆ´™Í∫¨©™Í∫Æ´™Í∫Æ´™ÍæÓ´™Í∫¨` Ä@Ùˇˇ›˜}]U›ˇˇfl˜›ˇ˜ˇ¸`'Ä@Ùæ´™Í∫Æ´™Í∫Æ´™Í∫Æ´´Óˇ˛Ô™Í∫¨`˛ˇ¿Ùˡ¸`'Ä@ÙÆ´™Í8é#™Í∫Æ´™Í∫Æ´™Íˇæ´™Í∫¨`!Ä@Ù}’˚U]¸UWU›˜˝ˇu]◊t`+Ä@˘ ˝Æ´™»í¢Í∫Æ´™Í∫Æ´™ÍæÓ´™Í∫¨`"ɡ@Ùˇw˚Uwu’uUW]fl¸ˇ›˜}¸`'Ç@ÙÆ´™‚∏å!™Í∫Æ´™Í∫Æ´™Óª˛´™Í∫¨`!Ç@Ùu]˙U’¸Uu›w˛ˇW]◊t`'Ç@ÙÆ´™»ê$"j∫Æ´™Í∫Æ´™ÍæÓ´™Í∫¨`"Ç@Ùˇw˚Uw}flWUw}fl˜¸ˇ›ˇ‹`'Ç@ÙÆ´™Í8é#™Í∫Æ´™Í∫Æ´™Íˇæ´™Í∫¨`Ç@Ùˡ¸`'Ç@ÙÆ´à¿àÍ∫Æ£àÍ∫Æ´™Íªæ´™Í∫¨`$Ç@˘ ˝u˛UTE˜U w}ˇ˝›UUWT`'ɡ@ÙÆ´"@j≤$â"HöÆ´™ÍæÓ´™Í∫¨` Ä@Ù›˝UTE˘UWw›˝ˇUW]‹`'Ä@ÙÆ´à¿àÍ∫Æ+àÍ∫Æ´™Íªæ´™Í∫¨` Ä@Ùu˛UTE˜Uw_fl˝›˛UT`&˛ˇ¿ÙÆ´"@j≤$â"HöÆ´™ÍæÓ´™Í∫¨` Ä@Ù›˝UTE˘UWw›˝ˇUw}‹`'Ä@ÙÆ´à¿àÍ∫Æ£àÍ∫Æ´™Íªæ´™Í∫¨`Ä@Ùˡ¸`+ġ¿@˘ ˝Æ#Ä¿b8éÄ‚8飙Í∫Æ´à‚:å`Å @Ù˛UQEEˆUWu˝UT`'Ç@Ù$Å@H@â"j∫Æ´ Hí$`Ç@Ù˛UEQEıU]›˝UT`'Ç@ÙÆ#@b8å!b8é#™Í∫Æ´à‚8¨`Ç@Ù˛UQDTıUu˝UT`'Ç@Ù$    @@ê@$â"j∫¨©Hí$`Ç@Ù˝UQEıU]›˝UT`'Å @ÙÆ#Ä¿b8éÄ‚8飙Í∫Æ´à‚:å`ġ¿@˘ ˝ˡ¸`'Ä@Ù@@@`8é@`%Ä@ÙUDPDQTEDQU¸UEQUT`'Ä@Ù@@@@@`˛ˇ¿ÙUUDQAUQTUEˆUT`'Ä@Ù@@@Bå!@`%Ä@ÙUDADQEDQEQ¸UDUD`'Ä@Ù@@@@$@`Ä?@Ù    UUQDQE˛UEQıUT`1/Ä¿¿@Ä@ @@@`8é@`ÄÅ @Ùˡ¸`'Ç@Ù@@@@@`'Ç@ÙE@@P@PDQE@QD`'Ç@Ù@@@@@`'Ç@ÙEDADQEDQEDQTEDQ`'Å @Ù@@@@@`'Ä¿¿@ÙD@ADADDQEAD`'Ä?@Ù@@@@@`+Ä@˘ ˝EDPDQEDQETUUEDQ`'Ä@Ù@@@@@`Ä@Ùˡ¸`˛ˇ¿ÙÊ`Ä@ÙÊ`Ä@ÙÊ`Ä@ÙÊˇ‡Ň@Û?Áˇ‡Ä@’Ä@˘ ˘ ˘ ˘ ˘Ä@’ÄÄ@’Ä@@’Ä@@’Ä @’Ä @’Ä@’Ä@’Ä@˘ ˘ ˘ ˘ ˘Ä@’˛ˇ¿’Ä@’Ä@’Ä@’Ä@’Ä1@’ÄA@’ÄÇ@˘ ˘ ˘ ˘ ˘Å@’Ä @’Ä@@’ÄÄ@’Ä@’Ä@’Ä@’Ä@’Ä@˘ ˘ ˘ ˘ ˘˛ˇ¿’Ä@’Ä@’Ä@’Ä@’Ä  @’IJ@’˛Ä@’Å@˘ ˘ ˘ ˘ ˘Ç@’Ç@’ÇÄ@’Ç@@’ɡ‡@’Ä@’Ä@’Ä@’˛ˇ¿˘ ˘ ˘ ˘ ˘Ä@’Ä@’ÄÄ@’Ä9Ä@’ă@’Å@’Ç(@’Ñ»@’1/Ñ«@Ä@ Ä@ Ä@ Ä@ ÄÑ¿@’Ñ@’Ñ@’áˇ¯@’Ä@’Ä@’Ä@’˛ˇ¿’Ä@˘ ˘ ˘ ˘ ˘Ä@’áˇ¯@’Ñ@’Ñ@’Ñ@’Ñ@’Ñ@’á‡@’Ç @˘ ˘ ˘ ˘ ˘Å @’Ć@’Ä`@’Ä?¯@’Ä@’Ä@’˛ˇ¿’Ä@’Ä@˘ ˘ ˘ ˘ ˘ć@’Ä@’Ä@’Ä@’ć@’Ä    ¿@’Ä@@’Ä"@’ÄT@˘ ˘ ˘ ˘ ˘Äà@’Äê@’ć@’Ä@’Ä@’˛ˇ¿’Ä@’Ä@’Ä@˘ ˘ ˘ ˘ ˘Ä@’Ä@’Ä@’Ä@’Ä@’Ä@’Ä@’Ä@’Ä@˘ ˘ ˘ ˘ ˘Ä@’Ä@’Ä@’Ä@’Ä@’Ä@’Ä@’Ä@’Ä@˘ ˘ ˘ ˘ ˘Ä@’Ä@’Ä@’Ä@’Ä@’Ä@’Ä@’Ä@’1/Ä@Ä@ Ä@ Ä@ Ä@ ÄÄ@’Ä@’Ä@’Ä@’Ä@’Ä@’Ä@’Ä@’Ä@˘ ˘ ˘ ˘ ˘Ä@’Ä@’Ä@’Ä@’Ä@’Ä@’Ä@’Ä@’Ä@˘ ˘ ˘ ˘ ˘Ä@’Ä@’Ä@’Ä@’Ä@’Ä@’Ä@’Ä@’Ä@˘ ˘ ˘ ˘ ˘Ä@’°ddProˇˇˇˇˇˇ    1¢›ƒ˚†õ°ñ †ò°ddPro(
  2891. °⁄≈¸
  2892. .ˇ¡ñ¡ñˇ†°dONLNdˇˇ(´È8
  2893. †ô†ò°ddPro(‘ °dONLNdˇˇ(∂‡Tools
  2894. †ô†ò°ddPro(ˇ°dONLNdˇˇ(¡flDown†ô†ó†ú°ddPro°ddProˇˇˇˇˇˇ
  2895. fifü¸1H¸ã†õ°ñ †ò°ddPro(
  2896. ÔE˝é†°dONLNdˇˇ(˘H21 Tools Across†ô†ó†ú°ddPro†å††°§P
  2897.     ˇˇˇˇˇˇˇˇ"fl ###
  2898. ##Í#†£
  2899. fifü¸"fl #
  2900. #͆°"ˆ†ç°ddProˇˇˇˇˇˇ    1˝˜)†õ°ñ †ò°ddPro(
  2901. ¸Ù +¯ê°dONLNdˇˇ(# of †ô†ò°ddPro(ÏP°dONLNdˇˇ(˘ horizontal †ô†ò°ddPro(§p°dONLNdˇˇ+
  2902. pixels†ô†ó†ú°ddPro†å††°§P
  2903.     ˇˇˇˇˇˇˇˇ"’#Í##
  2904. ###†£
  2905. fifü¸"’Í#
  2906. #†°"⁄Í˚†ç°ddProˇˇˇˇˇˇ    1ÕΩÔ‰†õ°ñ †ò°ddPro(
  2907. Ã∫Á∑‡°dONLNdˇˇ(÷»# of †ô†ò°ddPro(É@°dONLNdˇˇ(·¿    vertical †ô†ò°ddPro(c¿°dONLNdˇˇ+ pixels†ô†ó†ú°ddPro°ddProˇˇˇˇˇˇ
  2908. fifü¸1M5Yé†õ°ñ †ò°ddPro(
  2909. L2Z놰dONLNdˇˇ(V5PopPoint - ( 152, 29 )†ô†ó†ú°ddPro
  2910. fifü¸    ˇˇˇˇˇˇˇˇ"Ñ/—†å†å††°§P
  2911. "}8###'#ˇˇˇˇˇˇ
  2912. Ñ
  2913. flgflg†£
  2914. fifü¸    ÅÏ}8ò^}89ˇ~9:ˇ:<ˇÄ<=ˇÅ=>ˇÇ>@ˇÉ@AˇÑACˇÖCDˇÜDFˇáFGˇàGIˇâIJˇäJKˇãKMˇåMNˇçNPˇéPQˇèQSˇêSTˇëTVˇíVWˇìWXˇîXZˇïZ[ˇñ[]ˇó]^ˇò8^ˇˇ    ˇˇˇˇˇˇˇˇ"}8#'†°††°§P
  2915. "}H# ###ˇˇˇˇˇˇÑ
  2916. flgflg†£
  2917. fifü¸    Åt}Hâ_}HIˇ~IKˇKMˇÄMOˇÅOQˇÇQSˇÉSUˇÑUWˇÖWYˇÜY[ˇá[]ˇà]_ˇâH_ˇˇ    ˇˇˇˇˇˇˇˇ"}H #†°°ddProˇˇˇˇˇˇ    1Ögêÿ†õ°ñ †ò°ddPro$
  2918. Ñdë€
  2919.     †@°dONLNdˇˇ(çg
  2920. Number of †ô†ò°ddPro$`°dONLNdˇˇ)*VERTICAL†ô†ò°ddPro$ü¿°dONLNdˇˇ)/ pixels†ô†ó†ú°ddPro°ddProˇˇˇˇˇˇ
  2921. fifü¸1ìfû†õ°ñ †ò°ddPro$
  2922. ícüˆ@°dONLNdˇˇ(õf
  2923. Number of †ô†ò°ddPro$`°dONLNdˇˇ)*
  2924. HORIZONTAL†ô†ò°ddPro$ @°dONLNdˇˇ)> pixels†ô†ó†ú°ddPro†ç°ddProˇˇˇˇˇˇ
  2925. fifü¸1p∂~Y†õ°ñ †ò°ddPro0
  2926. o≥[
  2927.  @°dONLNdˇˇ(z∂!Offset between Tools - { 10, 10 }†ô†ó†ú°ddPro†ç†å°ddProˇˇˇˇˇˇ
  2928. fifü¸18ºM†õ°ñ †ò°ddPro$
  2929. 7πN
  2930.      @°dONLNdˇˇ(@º 21  - Tools Across
  2931. †ô†ò°ddPro$ @°dONLNdˇˇ*
  2932.   8  -  Tools Down †ô†ó†ú°ddPro°ddProˇˇˇˇˇˇ
  2933. fifü¸1,∏:2†õ°ñ †ò°ddPro0
  2934. +µ;5
  2935.  @°dONLNdˇˇ(6∏Size of Matrix - { 21, 8 }†ô†ó†ú°ddPro†å††°§P
  2936.     ˇˇˇˇˇˇˇˇ":###'#ˇˇˇˇˇˇÑ
  2937. flgflg†£
  2938. fifü¸    ÅÏ:U=:ˇ;ˇ<ˇ=ˇ>ˇ?ˇ@ ˇA "ˇB"#ˇC#%ˇD%&ˇE&(ˇF()ˇG)*ˇH*,ˇI,-ˇJ-/ˇK/0ˇL02ˇM23ˇN35ˇO56ˇP67ˇQ79ˇR9:ˇS:<ˇT<=ˇU=ˇˇ    ˇˇˇˇˇˇˇˇ":#'†°††°§P
  2939. ";&# ###ˇˇˇˇˇˇÑ
  2940. flgflg†£
  2941. fifü¸    Åt;&G=;&'ˇ<')ˇ=)+ˇ>+-ˇ?-/ˇ@/1ˇA13ˇB35ˇC57ˇD79ˇE9;ˇF;=ˇG&=ˇˇ    ˇˇˇˇˇˇˇˇ";& #†°°ddProˇˇˇˇˇˇ    1CEN´†õ°ñ †ò°ddPro$
  2942. BBOÆ
  2943.     0°dONLNdˇˇ+çNumber of  elements †ô†ò°ddPro$¸0°dONLNdˇˇ)MTALL†ô†ó†ú°ddPro°ddProˇˇˇˇˇˇ
  2944. fifü¸1QE\∂†õ°ñ †ò°ddPro$
  2945. PB]∏0°dONLNdˇˇ(YENumber of  of elements †ô†ò°ddPro$ªp°dONLNdˇˇ)WWIDE†ô†ó†ú°ddPro†ç†ç†å°ddProˇˇˇˇˇˇ
  2946. fifü¸1Ö2†õ°ñ †ò°ddPro0
  2947. ˇÇ4
  2948. °dONLNdˇˇ(
  2949. Ö'Specifier   -   { 152, 29, 148, 44, 0 }†ô†ó†ú°ddPro†å°ddProˇˇˇˇˇˇ
  2950. fifü¸1yZ    †õ°ñ †ò°ddPro$
  2951. v[
  2952.     °dONLNdˇˇ(%yPopPoint†ô†ò°ddPro$‡°dONLNdˇˇ)$ 
  2953. †ô†ò°ddPro$°dONLNdˇˇ(/y) Pressing the mouse button at this point †ô†ò°ddPro$°dONLNdˇˇ*
  2954. &will make the elements in the palette †ô†ò°ddPro$°dONLNdˇˇ*
  2955. *appear.  This is relative to the top left †ô†ò°ddPro$°dONLNdˇˇ*
  2956. %corner of the front document window, †ô†ò°ddPro$°dONLNdˇˇ*
  2957.  unless the AbsoluteFlag is set .†ô†ó†ú°ddPro†å††°§P
  2958.     ˇˇˇˇˇˇˇˇ"·###Δ#ˇˇˇˇˇˇÑ
  2959. flgflg†£
  2960. fifü¸    ÅT¨"·fi·ˇ◊fiˇ–◊ˇ…–ˇ¡…ˇ∫¡ˇ ≥∫ˇ!¨≥ˇ"¨·ˇˇ    ˇˇˇˇˇˇˇˇ"·#Δ†°††°§P
  2961. "Ô#Ú ##ÛÙ#ˇˇˇˇˇˇÑ
  2962. flgflg†£
  2963. fifü¸    Å†’Ô’Ôˇ’÷ÓÔˇ÷◊ÌÓˇ◊ÿÏÌˇÿŸÎÏˇŸ⁄ÍΡ⁄€Ë͡€‹Áˡ‹›ÊÁˇ›fiÂÊˇfifl‰Âˇfl‡„‰ˇ‡„ˇˇ    ˇˇˇˇˇˇˇˇ"ÔÚ #ÛÙ†°†ç†ç†å††°§P
  2964. "˛%#Â###ˇˇˇˇˇˇÑ
  2965. flgflg†£
  2966. fifü¸    Åå„%˝4„%4ˇ‰34ˇÊ23ˇË12ˇÈ01ˇÎ/0ˇÌ./ˇÔ-.ˇÒ,-ˇÚ+,ˇÙ*+ˇˆ)*ˇ¯()ˇ˙'(ˇ˚&'ˇ˝%&ˇˇ    ˇˇˇˇˇˇˇˇ"˛%Â#†°°ddProˇˇˇˇˇˇ    1fl:&Ô†õ°ñ †ò°ddPro$
  2967. fi7'Ú°dONLNdˇˇ(Á: AbsoluteFlag†ô†ò°ddPro$Ä¿)3
  2968. †ô†ò°ddPro$°dONLNdˇˇ(Ò:.If this flag is set (nonZero) the coordinates †ô†ò°ddPro$°dONLNdˇˇ*
  2969. /specified as the PopPoint  and TopLeft will be †ô†ò°ddPro$°dONLNdˇˇ*
  2970. 0Global instead of the default behavior of being †ô†ò°ddPro$°dONLNdˇˇ*
  2971. .relative to the top left corner of the front  †ô†ò°ddPro$°dONLNdˇˇ*
  2972. document window. 
  2973. †ô†ó†ú°ddPro†ç†å†å††°§P
  2974.     ˇˇˇˇˇˇˇˇ" ###-#ˇˇˇˇˇˇÑ
  2975. flgflg†£
  2976. fifü¸    Åú *7  ˇ ˇˇˇˇˇˇ ˇ!!ˇ"!$ˇ#$'ˇ$')ˇ%),ˇ&,/ˇ'/1ˇ(14ˇ)47ˇ* 7ˇˇ    ˇˇˇˇˇˇˇˇ" #-†°††°§P
  2977. "ˇ# ## ı#ˇˇˇˇˇˇÑ
  2978. flgflg†£
  2979. fifü¸    Åˇˇˇˇˇˇˇ    
  2980. ˇ    
  2981.  
  2982. ˇ
  2983.  ˇˇ    ˇˇˇˇˇˇˇˇ"ˇ # ı†°†ç°ddProˇˇˇˇˇˇ    1#<B∂†õ°ñ †ò°ddPro$
  2984. "9Cπ≠°dONLNdˇˇ+TopLeft†ô†ò°ddPro$-) 
  2985. †ô†ò°ddPro$≠°dONLNdˇˇ(5<!Point where the cursor is at the †ô†ò°ddPro$≠°dONLNdˇˇ*
  2986. top left of the first element.†ô†ó†ú°ddPro†ç†ç°ddProˇˇˇˇˇˇ
  2987. fifü¸1ûà Ô†õ°ñ †ò°ddPro(
  2988. ùÖÀÒ
  2989. °dONLNdˇˇ(®àTopLeft - ( 148, 44 )†ô†ò°ddPro0,     Helvetica
  2990. ˝Ä°dONLNdˇˇ)T  
  2991. †ô†ò°ddPro$
  2992.     °dONLNdˇˇ(≥àPoint where the cursor is at  †ô†ò°ddPro$°dONLNdˇˇ*
  2993. the  top left  corner of the †ô†ò°ddPro$°dONLNdˇˇ*
  2994. first element.†ô†ó†ú°ddPro
  2995. fifü¸    ˇˇˇˇˇˇˇˇ"ì˙∏
  2996. †ç†É†ó°ñ†óˇb◊#ˇ ˇˇˇˇ#◊°ñ 
  2997. _,Times
  2998. .ˇ°dONLNdˇˇ(⁄Z36°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)<5≠(QZGExample of a Palette Structure with a single kPopUpPal palette defined:†ó°ñ†ó°ñ,    Monaco
  2999.     °dONLNdIAÑL+Hglobal gPaletteList :=°dONLNd`AL)ê{†ó°ñ°dONLNdcLrWx(tê{†ó°ñ°dONLNdkW®b&+6 { 152, 29, 148, 44 },°dONLNdÅW8b)ê"# PopPoint, TopLeft, (AbsoluteFlag†ó°ñ°dONLNd´b\mû+$ (optional))†ó°ñ°dONLNdπm®x‰(ïΔ
  3000. kPopUpPal,°dONLNdΔm8xå)ê# Palette type†ó°ñ°dONLNd◊x®É‰(†Δ
  3001. { 21, 8 },°dONLNd‰x8É∂)ê# Size of Tool matrix†ó°ñ°dONLNd˝É®é‰(´Δ
  3002. { 10, 10 }°dONLNd
  3003. É8éº)ê# Offset between tools†ó°ñ
  3004. °dONLNd"éröv(∂ê}†ó°ñ°dONLNd)ô•+¢ }
  3005.     L¿°dONLNd*ö•);†óˇuP◊#ˇ ˇˇˇˇ#◊°ñ 
  3006. _,Times
  3007. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛37†ó°ñ°dONLNd)N5ø(QlThe kPalWind Palette†ó°ñ†ó°ñ°dONLNdC<OŸ(kZZThis section describes the setup required for using a palette that is contained within its†ó°ñ°dONLNdsO<[»* Pown window (kPalWind). MacDraw Pro's pattern palette (once 'pulled off') will be†ó°ñ°dONLNdƒ[<gfi*  contained within its own window.†ó°ñ†ó°ñ°dONLNdËs<S*Note{İdONLNdÏsTŸ)R:  Tools contained within palettes of this type must be the same size and the same†ó°ñ°dONLNd?`ã•+ distance apart.†ó°ñ†ó°ñ
  3008. °dONLNdOóÏ™:+åkPalWind†ó°ñ
  3009. °dONLNdX©πµl(—◊'Palette that is defined by coordinates.†ó°ñ°ddPro†Ç†å
  3010. ‘l£òÅ`
  3011. `HH|¸–oÇġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇ ÊeˇˇÃÀ ôôÛ3ˇˇ ˇ¸LÕˇˇ ˇˇ”3LÕ ˇˇ˛ fhÃÀ ôôfj ôôÜe ffff ≥3≥3≥3ˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôô ˇˇÃÀÓÓ ˇˇˇ˝ÃÀ ôôˇˇˇˇ ¶`LÕˇˇ ˇˇ¶eLÕ ˇˇ ˇÃÀ ôóôô ôôs3 ffLÕ ¶f¶f¶f Ú◊VÑÏˇˇffˇˇ33ˇˇÃÃˇˇˇˇ ˇˇÃÀˇ˛ ˇˇ˘óÃÀ ôôˇˇÊf LÕL–ˇˇ ˇˇyõLՠϡ ôúÃÀ L≈ôô ôôLàff30 ôôôôôôÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33 ÊbÃÀˇˇ ˇˇÛ1ÃÀ ôôˇˇÃ… LÕÉqˇˇ ˇˇLÕLÕ ˇˇˇ˚ ≥3ÃÀ ôô ôô&h ff åÃåÃåÃÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôô ÃÀÃÕˇˇ ˇˇÊcÃÀ ôùˇˇôô LÕ¶gˇˇ ˇˇjÆ ˇˇfl˝ ÃÀÃÀ .◊ôô ôô 34ff ÄÄÄôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇ ÃÀ‹iˇˇ ˇˇŸóÃÀ ÃÕˇˇôô LÕº–ˇˇ ˇˇ™∞ ˇˇ¿ ÃÀôô LŒôô ff*¨ fffb s3s3s3ôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333 ÃÀÊgˇˇ ˇˇÃÀÃÀ ˇˇˇ˚ôô LÕ”9ˇˇ ˇ˚ˇˇ ˇˇ˛ ÃÀfd `ôô ffDF ffYñ ffffffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôô ÃÀÏÕˇˇ ˇˇôôƒE ˇˇÛ/ôô LÕÈöˇˇ ¯ˇˇ ˇˇ@     ÃÀ s5ôô fbff ffLÕ YôYôYôffffôôffffff(sing Fffffff33ˇˇ ÃÀÛ3ˇˇ ˇˇôô›fl y Dele LÕˇˇˇˇ ˇˇ ˇˇ fhÃÀ Ügôôffff ff30 asÃ33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ33 ÃÀ˘ôˇˇ ˇ˚ôôˇˇ ˇˇÊfôô LÕˇˇ”. Nˇˇ ÃÀUX ÃÀû ôôôô 30ff ffò LÕLÕLÕ33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô(Librar Ã…ôôˇˇ ˇˇÃ…ôô LÕˇˇ¶e Äˇˇ ÃÀàå ÃÀ≥0 ôôs3 ff ff @@@33ôô33ff333333ˇˇˇˇ ÃÀˇˇˇˇ ôôôùˇˇ ˇˇ≥1ôô L–ˇˇLÕ †ˇˇ Ã√ÃÀ ÃÀôô ôôLà9ff Û2Û2Û2 333333 A´T͡ôôÃÃôôôôôôffôô33 ÃÀˇˇÛ2 ôô∏“ˇˇ ˇˇôôôô ¶gˇˇLÕ ¿ˇˇ f`ÃÀ ÃÀfd ôô 36ff ÊfÊfÊf &f&f&f333333ˇˇÃÃôô ÃÀˇˇÊe ôôܡˇ ˇˇLÕóu›› ‡ˇˇ ÃÀ ÃÀ35 LŒôô @ff ŸôŸôŸô öööÓÓ››ªª™™ Ä∞ ôôŸõˇˇ ˇˇLÕƒG ˇˇˇ¸LÕ ˇˇˇˇ >sÃÀ ÃÀ›› LŒff ÃÃÃÃÃà Õ Õ Õ(ºtyUUDD"" ˇˇÃÀ‚  ÃÃˇˇÃÀ ôôÊgˇˇªªªªªª ˇˇÈìLÕ ˇˇ¿wwwwww ôô@ ôôôó Yöff øˇøˇøˇ
  3012. ` m*ÃŎŎ¢ˇ
  3013. ˇÅEÅE£E ˇEŌŌ§Œ ˇEŌŌ§ŒˇE˚˙ŒˆùŒÅ˙¿˙èŒˇŒŒˇÒŒ˛˙GˇE˙Œù˜EÅŒ∏ŒˇˇŒŒˇˇˆŒˇˇ˛Œˇˇ˛Œˇˇ˛ŒˇˇÛŒˇˇ˝ŒˇˇˆŒˇˇ€ŒˇŒŒˇ¸ŒˇˇıŒGˇE˚˙ŒùE˙ùEŒÅ˙¿˙˙ŒˇˇŒŒˇˇˆŒˇˇ˘Œˇˇ˛ŒˇˇÛŒˇˇ˛Œ˛ˇˆŒˇˇ›Œ˙ˇ˛Œ˛ˇ¯Œ˛˙iˇE˙ŒùE˙ùEÅŒ∏ŒˇˇŒŒˇˇŒŒ¸ˇ˛Œ˝ˇŒŒˇˇŒŒ˝ˇŒŒˇˇ˛Œ˝ˇ˝Œ¸ˇ˝ŒˇˇˆŒˇˇ˚Œ˝ˇ˛ŒˇˇŒŒˇˇ˛Œ˝ˇ˛ŒˇˇŒˇˇ˛ŒˇŒŒˇ˚ŒˇˇıŒÅˇE˚˙ŒùE˙ùEŒÅ˙¿˙˙Œ
  3014. ˇˇŒŒˇˇŒŒˇˇŒŒˇˇ˛Œˇˇ˛Œˇˇ˛Œˇˇ˛ŒˇˇŒŒˇˇŒŒˇˇŒŒˇˇŒŒˇˇ˝ŒˇˇˆŒˇˇ¸Œˇ˛ŒˇˇŒŒˇˇŒŒˇˇŒŒˇˇŒŒˇˇŒŒ˛ˇ¸ŒˇŒŒˇ˚Œˇˇ¯Œ˛˙xˇE˙ŒùE˙ùEÅŒ∏Œ
  3015. ˇˇŒŒˇˇŒŒˇˇŒŒˇˇ˛Œˇˇ˛Œˇˇ˛Œˇˇ˛ŒˇˇŒŒˇˇŒŒˇˇŒŒˇˇŒŒˇˇ˝Œˇˇ˝Œ¸ˇŒŒˇˇ˚Œ¸ˇŒŒˇˇŒŒˇˇŒŒˇˇŒŒˇˇŒŒˇˇ˝Œ˙ˇ¸ŒˇˇıŒ{ˇE˚˙ŒùE˙ùEŒÅ˙¿˙˙Œ
  3016. ˇˇŒŒˇˇŒŒˇˇŒŒˇˇ˛Œˇˇ˛Œˇˇ˛Œˇˇ˛ŒˇˇŒŒ˚ˇŒŒˇˇŒŒˇˇ˝ŒˇˇˆŒˇˇ¸ŒˇˇŒŒˇˇŒŒˇˇŒŒˇˇŒŒ˚ˇŒŒˇˇ¸ŒˇŒŒˇ˙Œˇˇ¯Œ˛˙uˇE˙ŒùE˙ùEÅŒ∏Œ
  3017. ˇˇŒŒˇˇŒŒˇˇŒŒˇˇ˛Œˇˇ˛Œˇˇ˛Œˇˇ˛ŒˇˇŒŒˇˇ˚ŒˇˇŒŒˇˇ˝ŒˇˇˆŒˇˇ¸ŒˇˇŒŒˇˇŒŒˇˇŒŒˇˇŒŒˇˇ˚Œˇˇ¸ŒˇŒŒˇ˙ŒˇˇıŒzˇE˚˙ŒùE˙ùEŒÅ˙¿˙˙Œ
  3018. ˇˇŒŒˇˇŒŒˇˇŒŒˇˇ˛Œˇˇ˛Œˇˇ˛Œˇˇ˛ŒˇˇŒŒˇˇ˛ŒˇŒŒˇˇŒŒˇˇ˝ŒˇˇˆŒˇˇ¸ŒˇˇŒŒˇˇŒŒˇˇŒŒˇˇŒŒˇˇ˛ŒˇŒŒˇˇÒŒˇˇ¯Œ˛˙XˇE˙ŒùE˘ùEÅŒ∑Œ˝ˇ˛ŒˇˇŒŒˇˇ˝ŒˇˇŒŒˇˇ˝ŒˇˇŒŒˇˇ˛Œ˝ˇ˝Œ¸ˇ˝ŒˇˇˆŒ¸ˇ˛Œ¸ˇ˛Œ¸ˇ˛Œ˝ˇ˛ŒˇˇÒŒˇˇıŒˇE˚˙Œù˜EŒÅ˙¿˙§Œˇˇ⁄Œ˛˙ˇEŌŌ‘Œˇ˛Œˇˇ◊ŒˇEŌŌ”Œ˝ˇ÷Œ
  3019. ˇÅÅ£ŎŎ¢ˇˇÈ˜ˇ˝‘ˇÅÅÏ ˇÈ˜ˇ˝‘ˇÓˡÈˇ˙ˇ˙ˇËãˇUˇÈ˜ˇ˝˛ˇÚˇÍ˛ˇÓËˇÈˇÚˇˇ˚ˇÚˇˇ˚ˇÚˇˇÈˇˆˇÒˇÒÃˇ˛ˇ˛ˇ˛ˇ˝ˇˇzˇ˘˜ˇÚ˜ˇ˝˛ˇ¸ˇˇ˘ˇÍ˛ˇı¸ˇËˇÈˇÚˇˇ˚ˇÚˇˇ˚ˇÚˇˇÈˇˆˇÒˇÒÏˇ˙ˇ˚ˇ˛ˇ˛ˇ˛ˇ˚ˇ˛ˇ˛ˇ˛ˇˇˇåˇ˘˜ˇˇÛ˜ˇ˝˛ˇ˝ˇˇ˙ˇÍ˛ˇıˇˇˇËˇÈˇô¸π˝
  3020. ˇˇ˚ˇˇˇˇˇˇˇˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇ˙ˇ˛ˇÒˇÒÃˇ˛ˇ˛ˇ˛ˇ˝ˇˇµˇ˘˜˛ˇÙ˜ˇ˝˛ˇ˝ˇˇ˙ˇÍ˛ˇıˇˇˇËˇÈˇôô˝π˛
  3021. ˇˇ˚ˇ˛ˇ˛ˇ˛ˇ˛ˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇ˚ˇˇ˛ˇ˛˙ˇ˚ˇ˛˙ˇ˚˝ˇ˙ˇıˇ˙ˇ˝ˇ˛ˇ˛ˇ˛ˇ˝ˇ˛ˇ˛ˇ˛ˇˇˇ†ˇ˘˜˝ˇı˜ˇ˝˛ˇ˝ˇ˛ˇ˚ˇÍ˛ˇıˇˇˇËˇÈˇ˛ô˛π
  3022.  
  3023. ˛ˇˇ˚ˇˇˇˇˇˇˇˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇ¸ˇˇ˛ˇ˛ˇ¸ˇ˚ˇ˛ˇ¸ˇ˚Ãˇ˛ˇ˛ˇ˛ˇ˝ˇˇ∂ˇ˘˜¸ˇˆ˜ˇ˝˛ˇ˝ˇˇˇˇˇ˝ˇÍ˛ˇıˇˇˇËˇÈˇ˝ôππ
  3024. ˝ˇˇ˚ˇ¸ˇ˛ˇ¸ˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇ˝ˇˇ˛ˇ˛ˇ¸ˇ˚ˇ˛ˇ¸ˇ˚Ïˇ˙ˇ˚ˇ˛ˇ˛ˇ˛ˇ˚ˇ˛ˇ˛ˇ˛ˇˇˇ£ˇ˘˜˚ˇ˜˜ˇ˝˛ˇ˝ˇˇˇˇ˛ˇÍ˛ˇıˇˇˇËˇÈˇ¸ôπ¸ˇˇ˚ˇˇˇˇˇˇˇˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇ˛ˇ˛ˇ˛ˇ˛ˇ˙ˇ˛ˇ˛ˇ˙ˇ˛Ãˇ˛ˇ˛ˇ˛ˇ˝ˇˇ≈ˇ˘˜˙ˇ¯˜ˇ˝˛ˇ˛ˇ˛ˇ˛ˇˇˇÍ˛ˇıˇˇˇËˇÈˇ˚¸ˇˇ˚ˇ˛ˇ˛ˇ˛ˇ˛ˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇˇ˝ˇ˛ˇ˛    ˇˇˇˇ˛ˇ˛ˇ˙ˇ˛˘ˇ˙ˇ˘ˇ˙ˇ˝ˇ˛ˇ˛ˇ˛ˇ˝ˇ˛ˇ˛ˇ˛ˇˇˇ™ˇ˘˜˘ˇ˘˜ˇ˝˛ˇˇ˛    ˇˇˇˇˇÍ˛ˇıˇˇˇËˇÈˇ¸Y#˝ˇˇ˚ˇˇˇˇˇˇˇˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇˇ˝ˇ˛ˇ˛    ˇˇˇˇ˛ˇ˛ˇ˙ˇ˛Ãˇ˛ˇ˛ˇ˛ˇ˝ˇˇ≤ˇ˘˜¸ˇˆ˜ˇ˝˛ˇˇ¸ˇ˛ˇˇˇÍ˛ˇı¸ˇˡÈˇ˝YY##˛ˇˇ˚ˇ¸ˇ˛ˇ¸ˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇ˛ˇ˛ˇ˛ˇ˛˙ˇˇ˛ˇ˛˜ˇ˛Ïˇ˙ˇ˚ˇ˛ˇ˛ˇ˛ˇ˚ˇ˛ˇ˛ˇ˛ˇˇˇûˇ˘˜ˇˇ˜ˇˇˆ˜ˇ˝˛ˇˇ˘˛ˇˇÍ˛ˇÙˇˇ˛ËˇÈˇ˛˛Y˛#ˇˇ˚ˇˇˇˇˇˇˇˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇ˝ˇˇ˛ˇ˚ˇ¸ˇ˛ˇ˚˙ˇ˛Ãˇ˛ˇ˛ˇ˛ˇ˝ˇˇøˇ˘˜ˇ˛˜ˇˇ˜˜ˇ˝˛ˇˇ˚ˇˇˇˇÍ˛ˇÙˇˇ˛ËˇÈˇ˝Y˝#ˇˇ˚ˇ˛ˇ˛ˇ˛ˇ˛ˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇ¸ˇˇ˛ˇ˚ˇ¸ˇ˛ˇ˚˙ˇ˛˝ˇ˙ˇıˇ˙ˇ˝ˇ˛ˇ˛ˇ˛ˇ˝ˇ˛ˇ˛ˇ˛ˇˇˇîˇı˜ˇˇ˜˜ˇ˝˛ˇ˛ˇ˝ˇˇˇˇÍ˛ˇÙ˛ˇ˛ËˇÈˇ¸Y¸#ˇˇ˚ˇˇˇˇˇˇˇˇˇ˚ˇ˝ˇ˙˙˛ˇˇÈˇ˚ˇˇ˛ˇ˚˙ˇ˛ˇ˚˙ˇ˛Ãˇ˛ˇ˛ˇ˛ˇ˝ˇˇÑˇÙ˜ˇˇ¯˜ˇ˝˛ˇ˝ˇˇ˛ˇ˛ˇÍ˛ˇÛˇ˝ËˇÈˇÚˇˇ˚ˇÚˇˇ˚ˇÚˇˇÈˇ˙ˇ˛ˇÒˇÒÏˇ˙ˇ˚ˇ˛ˇ˛ˇ˛ˇ˚ˇ˛ˇ˛ˇ˛ˇˇˇgˇÙ˜ˇˇ¯˜ˇ˝˛ˇ¸ˇˇ˝ˇ˛ˇÍ˛ˇÛˇ˝ËˇÈˇÚˇˇ˚ˇÚˇˇ˚ˇÚˇˇÈˇˆˇÒˇÒÃˇ˛ˇ˛ˇ˛ˇ˝ˇˇmˇÈ˜ˇ˝˛ˇˆˇ˛ˇÍ˛ˇ˚¯ˇ˝ËˇÈÔˇ˚Ôˇ˚ÔˇÈˇˆˇÒˇÒ˘ˇ˙ˇ˘ˇ˙ˇ˝ˇ˛ˇ˛ˇ˛ˇ˝ˇ˛ˇ˛ˇ˛ˇˇˇ ˇÈ˜ˇ˝‘ˇÓˡËˇ˙ˇ˙ˇÈãˇˇÈ˜ˇ˝‘ˇÅÅÏŎŎ¢ˇ ˇÈˇÅŪ ˇÈˇÅŪˇıˇˆˇÅŪˇˆ˛ˇ˜ˇÅŪˇˆ˛ˇ˜ˇÅŪˇ˜ˇˇˇ¯ˇÅŪˇ˜ˇˇˇ¯ˇÅŪˇ¯ˇ˝ˇˇ˘ˇÅŪˇ¯ˇ˝ˇˇ˘ˇÅŪˇ˘¯ˇ˙ˇπˇ∫ˇ∫ˇ∫ˇ‹ˇ˘ˇ˚ˇˇ˙ˇÅŪˇ˙ˇ˘ˇˇ˚ˇÅŪˇ˚ˇˇ˘˛ˇ¸ˇÅŪˇ¸˝ˇ˚¸ˇ˝ˇÅŪ ˇÈˇÅŪ ˇÈˇÅŪÁˇÅŪ ˇÈˇÅŪˇÈˇπˇ∫ˇ∫ˇ∫ˇ‹ ˇÈˇÅŪ ˇÈˇÅŪˇ¸ˇÔˇÅŪˇ˚ˇˇÒˇÅŪˇ˘ˇˇÛˇÅŪˇ˜ˇˇıˇÅŪˇıˇˇ˜ˇÅŪˇÛˇˇ˘ˇÅŪˇÒˇˇ˚ˇπˇ∫ˇ∫ˇ∫ˇ‹ˇÔˇ¸ˇ™ÅˇËˇ´ˇÈˇ™ˇÅ͡´^ˇÈˇ™ˇˇˇˇ¯ˇˇˇˇ¯ˇˇˇˇˇˇˇˇˇ ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ¯ˇˇˇˇˇ´>ˇÈˇ™ˇ˙ˇ˙ˇ˙ˇ˝ˇˇÌ¸ˇ¯ˇˇ˛ˇˇ√ˇ˛ˇ˛ˇ˙ˇˇ¨ˇÈˇ™ˇˇˇˇˇ˙ˇˇˇˇˇ˝ˇˇˇˇˇˇˇˇˇˇ˝ˇˇˇˇ˘ˇˇ˛ˇˇ„ ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛    ˇˇˇˇˇˇ¨TÁˇ™ˇ˙ˇ˙ˇ˙ˇ˝ˇˇÌˇˇˇˇ˛ˇ˝ˇ˝ˇ˛ˇ¸ˇ˝ˇ˛˝ˇ‹ˇ˛ˇ˛ˇ˙ˇˇ¨êˇÈˇ™ˇˇˇˇˇ˙ˇˇˇˇˇ˝ˇˇˇˇˇˇˇˇˇˇ˝¸ˇ¸ˇˇˇˇ˛    ˇˇˇˇˇˇ˛ˇ˛ˇˇˇˇˇˇ˘ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ¸ˇ˛    ˇˇˇˇˇˇ¨LˇÈˇ™ˇ˙ˇ˙ˇ˙¯ˇÌˇˇ˚˝ˇˇˇ˛ˇˇ¸ˇˇˇ˝ˇˇˇˇ˛ˇ€ˇ˙ˇ˙ˇˇ¨úˇÈˇπˇÛˇˇˇˇˇ˙ˇˇˇˇˇ˝ˇˇˇˇˇˇˇˇˇˇ˝ˇˇ¸ˇˇˇˇˇˇ˛ˇˇˇˇ˝ˇˇ˝ˇˇˇˇ˝ˇˇ¸ ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˙    ˇˇˇˇˇˇ“ˇ‹Wˇ¸Ûˇ¸ˇ™ˇ˙ˇ˙ˇ˙ˇ˝ˇˇÌˇˇ˚˝ˇ˛ˇˇ˛ˇˇ˛ˇˇˇ˝ˇˇˇˇ˝ˇ€ˇ˙ˇ˙ˇˇ¨gˇ¸ˇıˇ¸ˇ™ˇˇˇˇ¯ˇˇˇˇ¯ˇˇˇˇˇˇˇˇˇ ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ¯ˇˇˇˇˇˇ¨ˇ¸ˇıˇ¸ˇ™ˇÅ͡ˇ¨ˇ¸ˇıˇ¸ˇ™ÅˇÁˇ¨ˇ¸ˇıˇ¸ˇ™ˇÅ͡ˇ¨ˇ¸ˇıˇ¸ˇ™ˇÅ͡ˇ¨ˇ¸ˇıˇ¸ˇ™ˇÅ͡ˇ¨ˇ¸ˇıˇ¸ˇ™ˇÅ͡ˇ¨Kˇ¸ˇıˇ¸ˇπˇÛˇÒ¸ˇˇˇ˛ˇÏ¸ˇ˝    ˇˇˇˇˇˇÒ    ˇˇˇˇˇˇ…ˇˇ“ˇ‹7ˇ¸Ûˇ¸ˇ™ˇÒˇˇ¯ˇˇÏˇˇ˙ˇˇ˚ˇˇÒˇˇˇˇ≈ˇˇ¨OˇÈˇ™ˇÒˇˇ˝˛ˇˇˇ˛ˇÒˇˇ¸˝ˇ˛ˇ˝ˇÚˇˇˇˇ˛ˇ˛ˇˇˇ˝ˇˇÿˇˇ¨KˇÈˇ™ˇÒ˝ˇ˛ ˇˇˇˇˇˇˇˇÚ˝ˇˇˇˇˇˇˇˇˇ˝ˇ˛    ˇˇˇˇˇˇ˚ˇ◊ˇˇ¨HˇÈˇ™ˇÒˇˇ¸ˇˇˇˇ¸ˇÚˇˇ˝ ˇˇˇˇˇˇˇˇ˝ˇ˛ˇˇ¸ˇ˚ˇ◊ˇˇ¨DÁˇ™ˇÒˇˇ¸ˇˇˇˇˇˇÔˇˇ˝ ˇˇˇˇˇˇˇˇÔˇˇ˝ˇˇˇˇ˚˝ˇ÷ˇˇ¨HˇÈˇ™ˇÒˇˇ¸ˇˇˇˇ˛ˇÒ¸ˇ˝ˇˇˇ˛ˇˇˇˇ˝ˇˇ˛ˇ˝˝ˇ÷ˇˇ¨ˇÈˇ™ˇÅ͡ˇ¨ˇÈˇ™ˇÅ͡ˇ¨ˇ˙˜ˇ˙ˇπˇÛˇÅ͡ˇ“ˇ‹ˇ˚ˇ˜ˇ˚ˇ™ÅˇÁˇ¨ˇ¸ˇıˇ¸ˇ™ˇÅˆˇˆŒˇˇ¨#ˇ¸ˇıˇ¸ˇ™ˇÅˆˇ¸Œ˙¸Œˇˇ¨$ˇ¸ˇıˇ¸ˇ™ˇÅˆˇ˝Œ˙˙¸Œˇˇ¨&ˇ¸ˇıˇ¸ˇ™ˇÅˆˇ˛Œ˙ŒŒ˙˝Œˇˇ¨&ˇ¸ˇıˇ¸ˇ™ˇÅˆˇŒŒ˙˝Œ˙˛Œˇˇ¨&ˇ¸ˇıˇ¸ˇ™ˇÅˆˇŒ˛˙ŒŒ˝˙Œˇˇ¨Kˇ˚ˇ˜ˇ˚ˇ™ˇ˚ÛˇÛˇÛˇÛˇÛˇÛˇÛˇÛˇ˙ˇ˛Œ˙ŒŒ˙˝Œˇˇ¨vˇ˙˜ˇ˙ˇπˇÛˇ˚ˇıˇˇıˇÛˇÛˇÛˇˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇ˙ˇ˛Œ˙ŒŒ˙˝Œˇˇ“ˇ‹ÄˇÈˇ™ˇ˚ˇ˙ˇ˝ˇˇ˙ˇ˝ˇÛˇ˝ˇ˙ˇˇˇˇ˛ˇ˛ˇ˛ˇ˝ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇ˙ˇ˛Œ˙ŒŒ˙˝Œˇˇ¨sˇÈˇ™ˇ˚ˇˇ¸ˇ˝ˇˇˇ¸ˇ˝ˇÛˇÛˇÛˇˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇ˙ˇ˛Œ˝˙˝Œˇˇ¨ÇˇÈˇ™ˇ˚ˇˇ¸ˇ˝ˇˇˇ¸ˇ˝ˇ˝ˇ˙ˇˇ˘ˇ¸ˇ˝ˇ˛ˇ˛ˇˇ˝ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇ˙ˇˆŒˇˇ¨dÁˇ™ˇ˚ˇˇ˙ˇˇˇˇ˙ˇˇÛˇÛˇÛˇˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇ˙Ûˇ¨ÅˇÈˇ™ˇ˚ˇˇˇˇˇˇˇˇ˙ˇˇÛˇ˝ˇ˙ˇˇˇˇ˛ˇ˛ˇ˛ˇ˝ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇ˙ˇˆŒˇˇ¨qˇÈˇ™ˇ˚ˇˇˇˇˇˇˇˇ˙ˇˇÛˇÛˇÛˇˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇ˙ˇˆŒˇˇ¨{ˇÈˇ™ˇ˚ˇ˙ˇˇˇˇ˜ˇˇ˘ˇ¸ˇ˘ˇ¸ˇ˝ˇ˛ˇ˛ˇˇ˝ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇ˙ˇˆŒˇˇ¨pˇ¯˚ˇ¯ˇ™ˇ˚ˇ˝ˇ¸ˇˇˇ˝˙ˇˇÛˇÛˇÛˇˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇ˙ˇˆŒˇˇ¨–ˇ˙ˇˇ˚ˇˇ˙ˇ¯ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ¸ˇ˚ˇ˝ˇ¸ˇˇˇ˝˙ˇˇÛˇ˝ˇ˙ˇˇˇˇ˛ˇ˛ˇ˛ˇ˝ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇ˙ˇˆŒˇˇˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇqˇ˚ˇ˜ˇ˚ˇ™ˇ˚ˇ˝˙ˇˇˇ˝˙ˇˇÛˇÛˇÛˇˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇ˙ˇˆŒˇˇ¨~ˇ¸ˇıˇ¸ˇ™ˇ˚ˇıˇˇıˇ˝ˇ˙ˇˇ˘ˇ¸ˇ˝ˇ˛ˇ˛ˇˇ˝ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇ˙ˇˆŒˇˇ¨Dˇ¸ˇıˇ¸ˇ™ˇ˚ÛˇÛˇÛˇÛˇÛˇÛˇÛˇÛˇ˙ˇˆŒˇˇ¨ˇ¸ˇıˇ¸ˇ™ˇÅˆˇˆŒˇˇ¨ˇ¸ˇıˇ¸ˇ™ˇÅˆˇˆŒˇˇ¨Dˇ˚ˇ˜ˇ˚ˇ™ˇ˚ÛˇÛˇÛˇÛˇÛˇÛˇÛˇÛˇ˙ˇˆŒˇˇ¨Xˇ˙ˇˇ˚ˇˇ˙ˇ™ˇ˚ˇıˇˇıˇˇıˇˇıˇˇıˇˇıˇˇıˇˇıˇ˙ˇˆŒˇˇ¨{ˇ¯˚ˇ¯ˇ™ˇ˚ˇˇ˛ˇ˛ˇˇˇ˛ˇ˙ˇˇˇıˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇıˇˇıˇ˙ˇˆŒˇˇ¨VˇÈˇπˇÛˇ˚ˇıˇˇıˇˇıˇˇıˇˇıˇˇıˇˇıˇˇıˇ˙ˇˆŒˇˇ“ˇ‹ÑˇÈˇ™ˇ˚ˇ˛ˇ˛ˇ˛ˇˇˇ˙ˇ˝ˇˇ˛ˇ˙$ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇˇ˛ˇ˛ˇ˛ˇˇˇıˇ˙ˇˆŒˇˇ¨NˇÈˇ™ˇ˚ˇıˇˇıˇˇıˇˇıˇˇıˇˇıˇˇıˇˇıˇ˙ˇˆŒˇˇ¨sÁˇ™ˇ˚ˇˇ˛ˇ˛ˇˇˇ˛ˇ˙ˇˇˇıˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇıˇˇıˇ˙ˇˆŒˇˇ¨RˇÈˇ™ˇ˚ˇıˇˇıˇˇıˇˇıˇˇıˇˇıˇˇıˇˇ˚ˇ¸ˇ˙ˇˆŒˇˇ¨ÉˇÈˇ™ˇ˚ˇ˛ˇ˛ˇ˛ˇˇˇ˙ˇ˝ˇˇ˙ˇ˝#ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇˇ˛ˇ˛ˇ˛ˇˇˇıˇ˙ˇˆŒˇˇ¨NˇÈˇ™ˇ˚ˇıˇˇıˇˇıˇˇıˇˇıˇˇıˇˇıˇˇıˇ˙ˇˆŒˇˇ¨{ˇ˚˝ˇÛˇ™ˇ˚ˇˇ˛ˇ˛ˇˇˇ˛ˇ˙ˇˇˇıˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇıˇˇıˇ˙ˇˆŒˇˇ¨Sˇ˜ˇˇıˇ™ˇ˚ˇıˇˇıˇˇıˇˇıˇˇıˇˇıˇˇıˇˇıˇ˙ˇˆŒˇˇ¨ëˇıˇˇ˜ˇπˇÛˇ˚ˇ˛ˇ˛ˇ˛ˇˇˇ˙ˇ˝ˇˇ˛ˇ˙$ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇˇ˛ˇ˛ˇ˛ˇˇˇıˇ˙ˇˆŒˇˇ“ˇ‹@ˇÛˇ¯ˇ™ˇ˚ÛˇÛˇÛˇÛˇÛˇÛˇÛˇÛˇ˙ˇˆŒˇˇ¨ˇÚˇ˘ˇ™ˇÅˆˇˆŒˇˇ¨ˇÒˇ˙ˇ™ˇÅˆˇˆŒˇˇ¨@ˇÒˇ˙ˇ™ˇ˚ÛˇÛˇÛˇÛˇÛˇÛˇÛˇÛˇ˙ˇˆŒˇˇ¨xˇˇ˚ˇ™ˇ˚ˇ˛ˇ˛ˇ˝ˇ˛ˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇˇ˝˛ˇ¸ˇ˛ˇ˚ˇˇˇˇˇ˙ˇ˛ˇÛˇˇıˇ˙ˇˆŒˇˇ¨}ˇˇ˚ˇ™ˇ˚ˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇ˛˛ˇ¸ˇˇˇˇˇ˚ˇˇˇˇˇ˙ˇˇˇıˇˇıˇ˙ˇˆŒˇˇ¨{ˇÔˇ¸ˇ™ˇ˚˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇ˛ˇˇ˛ˇ˛ˇ˛ˇˇˇ˛ˇ¸˛ˇˇˇˇ˚˛ˇˇˇ˙ˇˇˇıˇˇıˇ˙ˇˆŒˇˇ¨zˇÔˇ¸ˇ™ˇ˚˝ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇˇ˛ˇ¸˝ˇˇ˛ˇˇ˚ˇˇˇ˛ˇ˙ˇˇˇıˇˇıˇ˙ˇˆŒˇˇ¨}ˇÈˇπˇÛˇ˚ˇ˛ˇ˛ˇ˝ˇ˛ˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇ˝ˇ¸˛ˇˇˇ˝ˇˇ˚ˇˇ˝ˇ˙ˇˇıˇˇıˇ˙ˇˆŒˇˇ“ˇ‹wˇÈˇ™ˇ˚ˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇ˛ˇ˛ˇ¸˛ˇˇˇ¸ˇˇ¸ˇˇ¸ˇ˚ˇˇıˇˇıˇ˙ˇˆŒˇˇ¨rÁˇ™ˇ˚˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇ˛ˇˇ˛ˇ˛ˇ˛ˇˇˇˇ¸˛ˇ˛ˇˇ˚ˇˇ˝ˇˇ˚ˇ¸ˇˇıˇˇıˇ˙ˇˆŒˇˇ¨pˇÈˇ™ˇ˚˝ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇˇ¸˛ˇ˝ˇˇˇ˚ˇˇ˛ˇˇ˙ˇ˝ˇÛˇÛˇ˙ˇˆŒˇˇ¨tˇÈˇ™ˇ˚ˇ˛ˇ˛ˇ˝ˇ˛ˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇˇ˝˛ˇ¸ˇ˛ˇ˚ˇˇˇˇˇ˙ˇ˛ˇÛˇˇıˇ˙ˇˆŒˇˇ¨yˇÈˇ™ˇ˚ˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇ˛˛ˇ¸ˇˇˇˇˇ˚ˇˇˇˇˇ˙ˇˇˇıˇˇıˇ˙ˇˆŒˇˇ¨{ˇˆ˛ˇ˜ˇ™ˇ˚˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇ˛ˇˇ˛ˇ˛ˇ˛ˇˇˇ˛ˇ¸˛ˇˇˇˇ˚˛ˇˇˇ˙ˇˇˇıˇˇıˇ˙ˇˆŒˇˇ¨ˇ¯ˇˇ˛ˇ¯ˇ™ˇ˚˝ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇˇ˛ˇ¸˝ˇˇ˛ˇˇ˚ˇˇˇ˛ˇ˙ˇˇˇıˇˇıˇ˙ˇˆŒˇˇ¨Dˇ˘ˇ¸ˇ¯ˇ™ˇ˚ÛˇÛˇÛˇÛˇÛˇÛˇÛˇÛˇ˙ˇˆŒˇˇ¨'ˇ˙ˇ¸ˇ˜ˇπˇÛˇÅˆˇˆŒˇˇ“ˇ‹#ˇ˚ˇ¸ˇ¸ˇ¸ˇ™ˇÅˆˇˆŒˇˇ¨Dˇˆˇ¸ˇ˚ˇ™ˇ˚ÛˇÛˇÛˇÛˇÛˇÛˇÛˇÛˇ˙ˇˆŒˇˇ¨àˇ˜ˇ¸ˇ˙ˇ™ˇ˚ˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇ˛ˇ˝ˇ¸˛ˇˇˇ˝ˇˇ˚ˇˇ¸ˇ˚ˇˇˇ˚ˇˇ˛ˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨âˇ˜ˇ˛ˇˇ˘ˇ™ˇ˚ˇ˛ˇ˛ˇ˝ˇ˛ˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇˇ˛ˇ¸˝ˇˇ˛ˇˇ˚ˇˇˇ˝ˇ˙ˇˇˇ˚ˇˇ˛ˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨Ñˇˆ˛ˇ˜ˇ™ˇ˚˝ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇˇ˛ˇ¸˛ˇˇˇˇ˚˛ˇˇ˛ˇ˙ˇˇˇˇ˚ˇˇ˛ˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨ÇˇÈˇ™ˇ˚˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇ˛ˇˇ˛ˇ˛ˇ˛ˇˇˇ˛˛ˇ¸ˇˇˇˇˇ˚    ˇˇˇˇˇ˙ˇˇˇˇ˚ˇˇ˛ˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨ÅˇÈˇ™ˇ˚ˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇ˝˛ˇ¸ˇ˛ˇ˚    ˇˇˇˇˇ˙ˇˇˇˇ˚ˇˇ˛ˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨ÅˇÈˇ™ˇ˚ˇ˛ˇ˛ˇ˝ˇ˛ˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇˇ¸˛ˇ˝ˇˇˇ˚ˇˇ˛ˇˇˇ˙ˇ˛ˇˇˇ˚ˇˇ˛ˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨áˇÈˇπˇÛˇ˚˝ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇˇˇ¸˛ˇ˛ˇˇ˚ˇˇ˝ˇˇ˙ˇ˝ˇˇˇ˚ˇˇ˛ˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ“ˇ‹uÁˇ™ˇ˚˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇ˛ˇˇ˛ˇ˛ˇ˛ˇˇ˛ˇ¸˛ˇˇˇ¸ˇˇ¸ˇˇ˚ˇ¸ˇˇˇ˚ˇˇ˛ˇÛˇ˙ˇˆŒˇˇ¨ÄˇÈˇ™ˇ˚ˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇ˛ˇ˝ˇ¸˛ˇˇˇ˝ˇˇ˚ˇˇ¸ˇ˚ˇˇˇ˚ˇˇ˛ˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨ÄˇÈˇ™ˇ˚ˇ˛ˇ˛ˇ˝ˇ˛ˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇˇ˛ˇ¸˝ˇˇ˛ˇˇ˚ˇˇˇ˝ˇ˙ˇˇˇ˚ˇˇ˛ˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨ÄˇÈˇ™ˇ˚˝ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇˇ˛ˇ¸˛ˇˇˇˇ˚˛ˇˇ˛ˇ˙ˇˇˇˇ˚ˇˇ˛ˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨Üˇ˜¯ˇ¸ˇ™ˇ˚˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇ˛ˇˇ˛ˇ˛ˇ˛ˇˇˇ˛˛ˇ¸ˇˇˇˇˇ˚    ˇˇˇˇˇ˙ˇˇˇˇ˚ˇˇ˛ˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨Dˇ¯ˇ˙ˇ˚ˇ™ˇ˚ÛˇÛˇÛˇÛˇÛˇÛˇÛˇÛˇ˙ˇˆŒˇˇ¨ˇ˘ˇ˙ˇ˙ˇ™ˇÅˆˇˆŒˇˇ¨ˇ˙ˇ˙ˇ˘ˇ™ˇÅˆˇˆŒˇˇ¨Lˇ˚ˇ˙ˇ¯ˇπˇÛˇ˚ÛˇÛˇÛˇÛˇÛˇÛˇÛˇÛˇ˙ˇˆŒˇˇ“ˇ‹Üˇ¸ˇ˙ˇ˜ˇ™ˇ˚ˇˇˇˇˇˇˇˇ˝ˇ˛ˇ˛ˇˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇıˇˇ˛ˇ˛ˇ˛ˇˇˇıˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨xˇ¸ˇ˘ˇ¯ˇ™ˇ˚Ûˇ˝ˇ˛ˇ˛ˇˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇÛˇˇ˛ˇ˛ˇ˛ˇˇˇıˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨Üˇ¸ˇ¯ˇ˘ˇ™ˇ˚ˇˇˇˇˇˇˇˇ˝ˇ˛ˇ˛ˇˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇıˇˇ˛ˇ˛ˇ˛ˇˇˇıˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨cˇ¸ˇ˜ˇ˙ˇ™ˇ˚ÛˇˇıˇÛˇˇˇˇˇˇˇˇˇÛˇˇ˛ˇ˛ˇ˛ˇˇÛˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨Çˇ¸Ùˇ˚ˇ™ˇ˚ˇˇˇˇˇˇˇˇ˝ˇ˛ˇ˛ˇˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇıˇˇ˛ˇ˛ˇ˛ˇˇˇıˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨pˇÈˇ™ˇ˚Ûˇ˝ˇ˛ˇ˛ˇˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇÛˇˇ˛ˇ˛ˇ˛ˇˇˇıˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨~ˇÈˇ™ˇ˚ˇˇˇˇˇˇˇˇ˝ˇ˛ˇ˛ˇˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇıˇˇ˛ˇ˛ˇ˛ˇˇˇıˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨[ˇÈˇ™ˇ˚ÛˇˇıˇÛˇˇˇˇˇˇˇˇˇÛˇˇ˛ˇ˛ˇ˛ˇˇÛˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨ÇÁˇπˇÛˇ˚ˇˇˇˇˇˇˇˇ˝ˇ˛ˇ˛ˇˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇıˇˇ˛ˇ˛ˇ˛ˇˇˇıˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ“ˇ‹pˇÈˇ™ˇ˚Ûˇ˝ˇ˛ˇ˛ˇˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇÛˇˇ˛ˇ˛ˇ˛ˇˇˇıˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨~ˇÈˇ™ˇ˚ˇˇˇˇˇˇˇˇ˝ˇ˛ˇ˛ˇˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇıˇˇ˛ˇ˛ˇ˛ˇˇˇıˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨`ˇÛˇˇ˘ˇ™ˇ˚ÛˇˇıˇÛˇˇˇˇˇˇˇˇˇÛˇˇ˛ˇ˛ˇ˛ˇˇÛˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨Eˇ¯˛ˇˇˇ˘ˇ™ˇ˚ÛˇÛˇÛˇÛˇÛˇÛˇÛˇÛˇ˙ˇˆŒˇˇ¨$ˇ˙ˇˇ˛ˇ˚ˇ˝ˇ™ˇÅˆˇˆŒˇˇ¨$ˇ˚ˇ¸ˇ¸ˇˇ˝ˇ™ˇÅˆˇˆŒˇˇ¨Jˇ¸ˇ¸ˇ¸ˇˇ˝ˇ™ˇ˚ÛˇÛˇÛˇÛˇÛˇÛˇÛˇÛˇ˙ˇˆŒˇˇ¨àˇ˝ˇ˚ˇ˛ˇˇˇ˝ˇ™ˇ˚ˇˇ˚ˇˇˇˇ˝ˇˇ˚ˇˇ˝ˇ˙ˇˇ˙ˇ˝ˇ˛ˇ˚ˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇ˚ˇ¸ˇˇˇ˙ˇ˛ˇ˙ˇˆŒˇˇ¨—ˇ˝ˇˇˇ˛˛ˇ˝ˇ˝ˇ¯ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ¸ˇ˚˚ˇ˚ˇˇˇˇˇˇ˛ˇˇˇˇˇ˙ˇ˛ˇˇ˙ˇ˝ˇˇ˝ˇˇ˚ˇˇˇˇ¸    ˇˇˇˇˇ˙ˇˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇÖˇ˝ˇˇˇ˜ˇ˝ˇ™ˇ˚˛ˇˇ˛ˇˇˇˇˇ˛    ˇˇˇˇˇˇ¸ˇ˚ˇˇ˙ˇ˝ˇˇ˛ˇˇ˝ˇˇˇˇ˙ˇˇˇˇ˙ˇˇˇıˇ˙ˇˆŒˇˇ¨~ˇ˝ˇÛˇ˝ˇ™ˇ˚ˇˇ˛˛ˇˇ˛ˇˇ˚ˇˇ˝ˇˇˇ˙ˇˇÛˇˇˇ˝ ˇˇˇˇˇˇ¸ˇˇˇˇ˚ˇ¸ˇˇ˛ˇ˙ˇˇ˙ˇˆŒˇˇ¨ˇ˝ˇÛˇ˝ˇ™ˇ˚ˇ˚ˇ˝ˇˇˇˇ˚˛ˇˇ˙ˇ˝ˇˇ˛ˇ˙ˇˇ˛ˇ˚ˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇ˚ˇ¸ˇˇ˝ˇ˙ˇ˙ˇˆŒˇˇ¨|ˇ˝Òˇ˝ˇ™ˇ˚˝ˇ˚ˇ ˇˇˇˇˇˇ˛˛ˇˇ˛ˇ˙ˇˇˇ˛ˇ˙ˇˇˇ˝ˇˇ˚ˇˇ¸ˇˇ˝ˇˇˇ˙ˇˇˇ¸ˇ˚ˇ˙ˇˆŒˇˇ¨wˇÈˇ™ˇ˚˝ˇˇ˛ˇˇ˛ˇ˛
  3025. ˇˇˇˇˇˇ˚ˇ¸ˇˇ˛ˇ˙ˇˇˇ˛ˇˇ˝ˇˇˇ˚ˇ¸ˇˇˇ˙ˇˇˇıˇ˙ˇˆŒˇˇ¨vˇÈˇ™ˇ˚ˇˇ˛ˇˇˇˇ˛ˇ˚    ˇˇˇˇˇ˙ˇˇÛˇˇˇ˝ˇˇˇˇ¸ˇˇ˝ˇˇ˚ˇ¸ˇˇˇ˙ˇˇ˙ˇˆŒˇˇ¨xˇÈˇ™ˇ˚ˇˇ˚ˇˇˇˇ˝ˇˇ˚ˇˇ˝ˇ˙ˇˇ˙ˇ˝ˇ˛ˇ˚ˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇ˚ˇ¸ˇˇˇ˙ˇ˛ˇ˙ˇˆŒˇˇ¨sÁˇ™ˇ˚˚ˇ˚ˇˇˇˇˇˇ˛ˇˇˇˇˇ˙ˇ˛ˇˇ˙ˇ˝ˇˇ˝ˇˇ˚ˇˇˇˇ¸    ˇˇˇˇˇ˙ˇˇˇ˙ˇ˝ˇ˙ˇˆŒˇˇ¨ÅˇÈˇπˇÛˇ˚˛ˇˇ˛ˇˇˇˇˇ˛    ˇˇˇˇˇˇ¸ˇ˚ˇˇ˙ˇ˝ˇˇ˛ˇˇ˝ˇˇˇˇ˙ˇˇˇˇ˙ˇˇˇıˇ˙ˇˆŒˇˇ“ˇ‹vˇÈˇ™ˇ˚ˇˇ˛˛ˇˇ˛ˇˇ˚ˇˇ˝ˇˇˇ˙ˇˇÛˇˇˇ˝ ˇˇˇˇˇˇ¸ˇˇˇˇ˚ˇ¸ˇˇ˛ˇ˙ˇˇ˙ˇˆŒˇˇ¨@ˇ˝Òˇ˝ˇ™ˇ˚ÛˇÛˇÛˇÛˇÛˇÛˇÛˇÛˇ˙ˇˆŒˇˇ¨ˇ˝ˇÛˇ˝ˇ™ˇÅˆˇˆŒˇˇ¨ˇ˝ˇÛˇ˝ˇ™ˇÅˆˇˆŒˇˇ¨Dˇ˝ˇÛˇ˝ˇ™ˇ˚ÛˇÛˇÛˇÛˇÛˇÛˇÛˇÛˇ˙ˇˆŒˇˇ¨Éˇ˝ˇÛˇ˝ˇ™ˇ˚˝ˇ˝˝ˇˇˇˇ˛ˇ˛ˇ˛ˇˇˇˇ¸ˇˇˇıˇˇ˙ˇ˝ˇˇ˝ˇˇ˝ˇˇˇ˝ˇˇ˛ˇˇˇ¸ˇˇˇ˙ˇˆŒˇˇ¨Üˇ˝ˇÛˇ˝ˇ™ˇ˚˝ˇ˝˝ˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇˇ˙ˇ˝ˇˇˇ¸ˇˇ˛ˇˇˇˇ˝ ˇˇˇˇˇˇ˝ˇˇˇıˇ˙ˇˆŒˇˇ¨xˇ˝˚ˇ¯ˇ˝ˇ™ˇ˚˝ˇ˝˝ˇˇˇˇ˛ˇ˛ˇˇˇˇ¸ˇˇ˛ˇˇıˇˇ¸ˇ˛˝ˇˇˇˇ˚
  3026. ˇˇˇˇˇˇ˚˛ˇˇıˇ˙ˇˆŒˇˇ¨ñˇ¸ˇ˛ˇ¯ˇ˝ˇπˇÛˇ˚ˇ˛˝ˇ˝ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇˇ˛ˇ˛ˇ˛ˇˇˇ˛ˇ˙ˇˇˇ˛ˇˇ˚ˇˇˇˇ˙ˇˇˇ˝ˇ˙ˇ˙ˇˆŒˇˇ“ˇ‹|ˇ˚ˇˇ¯ˇ˝ˇ™ˇ˚ˇ˛˝ˇ˝ˇˇˇˇ˛ˇ˛ˇ˛ˇˇıˇˇıˇˇ˛ˇ˙ˇˇˇ¸ˇ˚ˇˇˇ˙ˇˇˇ˛ˇˇ¸ˇˇ˙ˇˆŒˇˇ¨Éˇ˙ˇˇ¯ˇ˝ˇ™ˇ˚ˇ˛˝ˇ˝$ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˙ˇ˝ˇˇˇˇ¸ˇˇˇ˚ˇ¸ˇˇˇ˙ˇ˛ˇˇıˇ˙ˇˆŒˇˇ¨rˇ˘ˇˇ¯ˇ˝ˇ™ˇ˚ˇ˛˝ˇ˝ˇˇˇˇ˛ˇ˛ˇˇˇıˇˇıˇ˛ˇ˛¸ˇˇˇ˚ˇ¸ˇˇ˙ˇ˝ˇˇıˇ˙ˇˆŒˇˇ¨Éˇ¯ˆˇ˝ˇ™ˇ˚˝ˇ˝˝ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˙ˇ˝ˇˇ¸ˇˇ¸ˇˇ˚ˇˇ˝ˇˇˇ˙ˇ˛ˇ˙ˇˆŒˇˇ¨{ˇÈˇ™ˇ˚˝ˇ˝˝ˇˇˇˇ˛ˇ˛ˇ˛ˇˇˇˇ¸ˇˇˇıˇˇ˙ˇ˝ˇˇ˝ˇˇ˝ˇˇˇ˝ˇˇ˛ˇˇˇ¸ˇˇˇ˙ˇˆŒˇˇ¨~ˇÈˇ™ˇ˚˝ˇ˝˝ˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇˇ˙ˇ˝ˇˇˇ¸ˇˇ˛ˇˇˇˇ˝ ˇˇˇˇˇˇ˝ˇˇˇıˇ˙ˇˆŒˇˇ¨lÁˇ™ˇ˚˝ˇ˝˝ˇˇˇˇ˛ˇ˛ˇˇˇˇ¸ˇˇ˛ˇˇıˇˇ¸ˇ˛˝ˇˇˇˇ˚
  3027. ˇˇˇˇˇˇ˚˛ˇˇıˇ˙ˇˆŒˇˇ¨ÇˇÈˇ™ˇ˚ˇ˛˝ˇ˝ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇˇ˛ˇ˛ˇ˛ˇˇˇ˛ˇ˙ˇˇˇ˛ˇˇ˚ˇˇˇˇ˙ˇˇˇ˝ˇ˙ˇ˙ˇˆŒˇˇ¨DˇÈˇπˇÛˇ˚ÛˇÛˇÛˇÛˇÛˇÛˇÛˇÛˇ˙ˇˆŒˇˇ“ˇ‹ˇÚ˛ˇ˚ˇ™ˇÅˆˇˆŒˇˇ¨ˇÛ¸ˇ¸ˇ™ˇÅˆˇˆŒˇˇ¨@ˇı˙ˇ¸ˇ™ˇ˚ÛˇÛˇÛˇÛˇÛˇÛˇÛˇÛˇ˙ˇˆŒˇˇ¨~ˇÙ˚ˇ¸ˇ™ˇ˚ˇ˛ˇˇˇ˛ˇˇ¸ˇ˛˚ˇˇıˇˇˇˇ¸    ˇˇˇˇˇ˙ˇˇˇ˛ˇ˙ˇˇˇˇ¸    ˇˇˇˇˇ˛ˇ˛ˇ˛ˇ˙ˇˆŒˇˇ¨âˇı˚ˇ˚ˇ™ˇ˚ˇ˛¸ˇ˛ˇˇ˛ˇˇˇ˛ˇˇˇˇˇ˙ˇ˝ˇˇ˛ˇ˛ˇ˛    ˇˇˇˇˇˇ˛ ˇˇˇˇˇˇ¸ˇˇˇˇ˙ˇ˛ˇˇ˛ˇˇ˝ˇ˙ˇˆŒˇˇ¨ëˇˆˇ˛ˇ˙ˇ™ˇ˚ˇ˛¸ˇ˛ˇˇˇˇ˛ˇˇˇˇ˛ˇˇ˙ˇ˝ˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇˇˇˇˇ˙ˇ˛ˇˇˇ˛ˇ˛ˇ˛ˇ˙ˇˆŒˇˇ¨ãˇ˜ˇˇˇˇ˙ˇ™ˇ˚˝ˇ˛ˇ˛ˇˇˇ˛¸ˇ˛ˇˇˇˇˇ˝ˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇÛˇ"ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ¸ˇˇ˝ˇ˙ˇˆŒˇˇ¨çˇ¯ˇ˛ˇ˜ˇ™ˇ˚ˇˇˇ˛ˇ˛ˇˇ¸ˇ˛˛ˇˇˇˇ˝ˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇˇ¸ˇ˚    ˇˇˇˇˇ˛ˇˇˇˇ˛ˇˇ¸ˇˇˇ˚ˇ¸ˇ˙ˇˆŒˇˇ¨âˇ˘ˇˇˇˆˇπˇÛˇ˚¸ˇ˛˚ˇˇˇˇˇˇ˛    ˇˇˇˇˇˇ˝ˇˇˇˇˇ˝ˇˇ¸ˇˇ˝ˇ˙ˇˇˇˇ¸ˇˇˇ˝ˇ˙ˇˇ˚ˇ¸ˇ˙ˇˆŒˇˇ“ˇ‹}ˇ˙ˇ˛ˇıˇ™ˇ˚¸ˇ˛˚ˇ˛ˇ˛
  3028. ˇˇˇˇˇˇˇˇ˝ˇˇˇˇˇ¸ˇ˚ˇˇ˛ˇ˙ˇˇˇ˛ˇ˙ˇˇˇ˝ˇ˙ˇˇ˚ˇ¸ˇ˙ˇˆŒˇˇ¨}ˇ˙ˇˇÙˇ™ˇ˚˝ˇ˛ˇ˛ˇˇ˝ˇ˛¸ˇˇˇ˙ˇ˝ˇˇˇ˙    ˇˇˇˇ˙ˇˇˇıˇˇˇˇˇˇˇˇˇˇ¸ˇˇ˝ˇ˙ˇˆŒˇˇ¨yˇ˙˛ˇÛˇ™ˇ˚ˇ˛ˇˇˇ˛ˇˇ¸ˇ˛˚ˇˇıˇˇˇˇ¸    ˇˇˇˇˇ˙ˇˇˇ˛ˇ˙ˇˇˇˇ¸    ˇˇˇˇˇ˛ˇ˛ˇ˛ˇ˙Ûˇ¨ÖˇÈˇ™ˇ˚ˇ˛¸ˇ˛ˇˇ˛ˇˇˇ˛ˇˇˇˇˇ˙ˇ˝ˇˇ˛ˇ˛ˇ˛    ˇˇˇˇˇˇ˛ ˇˇˇˇˇˇ¸ˇˇˇˇ˙ˇ˛ˇˇ˛ˇˇ˝ˇ˙ˇˆŒˇˇ¨çˇÈˇ™ˇ˚ˇ˛¸ˇ˛ˇˇˇˇ˛ˇˇˇˇ˛ˇˇ˙ˇ˝ˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇˇˇˇˇ˙ˇ˛ˇˇˇ˛ˇ˛ˇ˛ˇ˙ˇ˛Œ˝˙˝Œˇˇ¨ÑÁˇ™ˇ˚˝ˇ˛ˇ˛ˇˇˇ˛¸ˇ˛ˇˇˇˇˇ˝ˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇÛˇ"ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ¸ˇˇ˝ˇ˙ˇ˛Œ˙ŒŒ˙˝Œˇˇ¨CˇÈˇ™ˇ˚ÛˇÛˇÛˇÛˇÛˇÛˇÛˇÛˇ˙ˇ˛Œ˙ŒŒ˙˝Œˇˇ¨ˇÈˇ™ˇÅˆˇ˛Œ˙ŒŒ˙˝Œˇˇ¨&ˇÈˇπˇÛˇÅˆˇŒ˛˙ŒŒ˝˙Œˇˇ“ˇ‹ˇÈˇ™ˇÅˆˇŒŒ˙˝Œ˙˛Œˇˇ¨ˇÈˇ™ˇÅˆˇ˛Œ˙ŒŒ˙˝Œˇˇ¨ˇÈˇ™ˇÅˆˇ˝Œ˙˙¸Œˇˇ¨ˇÈˇ™ˇÅˆˇ¸Œ˙¸Œˇˇ¨ˇÈˇ™ˇÅˆˇˆŒˇˇ¨ˇÈˇ™ÅˇÁˇ¨ˇÈˇ™ˇˆŒˇéŒˇˆŒˇˆˇˇ¨(ˇÈˇ™ˇ¸Œ˙¸ŒˇéŒˇ¸Œ˙¸Œˇ˚ˇ˝ˇˇ¨5ˇÈˇπˇÛˇ˝Œ˙˙¸ŒˇéŒˇ¸Œ˙˙˝Œˇˇ˝ˇ˝ˇˇ“ˇ‹.ˇÈˇ™ˇ˛Œ˙Œ¸˙ŒˇéŒˇŒ¸˙Œ˙˛Œˇˇ˝˝ˇˇˇ¨.ˇÈˇ™ˇŒŒ˙˚Œ˙ŒˇéŒˇŒ˙˚Œ˙ŒŒˇˇ˝ˇˇˇˇ¨.ˇÈˇ™ˇŒ˙˙˚Œ˙ŒˇéŒˇŒ˙˚Œ˙˙Œˇˇ˝ˇˇˇˇ¨.ˇÈˇ™ˇ˛Œ˙Œ¸˙ŒˇéŒˇŒ¸˙Œ˙˛Œˇ˚ˇˇˇˇ¨-ˇÈˇ™ˇ˝Œ˙˙¸ŒˇéŒˇ¸Œ˙˙˝Œˇ˛ˇ¸ˇˇˇ¨+ˇÈˇ™ˇ¸Œ˙¸ŒˇéŒˇ¸Œ˙¸Œˇ˛ˇ¸ˇˇˇ¨(ˇÈˇ™ˇ¸Œ˙¸ŒˇéŒˇ¸Œ˙¸Œˇ˛˙ˇˇˇ¨ˇÈˇ™ˇˆŒˇéŒˇˆŒˇˆˇˇ¨ˇÈˇπˇÛŎÁˇ“ˇ‹ˇÈˇßÅˇÍˇ¨ ˇÈˇÅŪ ˇÈˇÅŪ ˇÈˇÅŪ ˇÈˇÅŪ ˇÈˇÅŪ ˇÈˇÅŪ ˇÈˇÅŪóˇÈˇ¯ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ˘ˇ ˇÈˇÅŪ ˇÈˇÅŪ ˇÈˇÅŪ ˇÈˇÅŪ ˇÈˇÅŪ ˇÈˇÅŪ ˇÈˇÅŪ ˇÈˇÅŪˇÈˇπˇ∫ˇ∫ˇ∫ˇ‹†å°ddProˇˇˇˇˇˇ    1’ò„/†õ°ñ †ò°ddPro0
  3029. ‘ï‰2.ˇœÑœѰdONLNdˇˇ(flò"Specifier   -   { 'Patterns', 34 }†ô†ó†ú°ddPro†å°ddProˇˇˇˇˇˇ
  3030. ‘l£1Ââ†õ°ñ †ò°ddPro$
  3031. ‰Ü
  3032.     °dONLNdˇˇ(ÌâWindowSpecifier†ô†ò°ddPro$İdONLNdˇˇ)B 
  3033. †ô†ò°ddPro$°dONLNdˇˇ(˜â)This value should be a string if you are †ô†ò°ddPro$°dONLNdˇˇ*
  3034. $specifying the window by title.  It †ô†ò°ddPro$°dONLNdˇˇ*
  3035. %should be an integer if specified by †ô†ò°ddPro$°dONLNdˇˇ*
  3036. ordinality.†ô†ó†ú°ddPro††°§P
  3037.     ˇˇˇˇˇˇˇˇ"‚ı#
  3038. ##›#ˇˇˇˇˇˇ
  3039. Ñ
  3040. ’m’m†£
  3041. ‘l£    Åd‚’Ïı‚Ùıˇ„ÒÙˇ‰ÌÒˇÂÍÌˇÊÊ͡Á„ÊˇËfl„ˇÈ‹flˇÍÿ‹ˇÎ’ÿˇÏ’ıˇˇ    ˇˇˇˇˇˇˇˇ"‚ı
  3042. #›†°†ç†å††°§P
  3043. "‚"#
  3044. ###ˇˇˇˇˇˇÑ
  3045. ’m’m†£
  3046. ‘l£    Åd‚"Ï;‚"#ˇ„#&ˇ‰&(ˇÂ(+ˇÊ+.ˇÁ.0ˇË03ˇÈ35ˇÍ58ˇÎ8;ˇÏ";ˇˇ    ˇˇˇˇˇˇˇˇ"‚"
  3047. #†°°ddProˇˇˇˇˇˇ    1ÊEø†õ°ñ †ò°ddPro$
  3048. ÂB¬-°dONLNdˇˇ(ÓE HeaderHeight†ô†ò°ddPro$©‡)6
  3049. †ô†ò°ddPro$-°dONLNdˇˇ(¯EThis integer is the number of †ô†ò°ddPro$-°dONLNdˇˇ*
  3050. pixels between the top of the †ô†ò°ddPro$-°dONLNdˇˇ*
  3051. "palette window and the top of the †ô†ò°ddPro$-°dONLNdˇˇ*
  3052. first tool.†ô†ó†ú°ddPro†ç†ç†å††°§P
  3053.     ˇˇˇˇˇˇˇˇ"dy###!##Ô#†£
  3054. ‘l£"dy#!#Ô†°"uâ†ç†õ°ñ †ò°ddPro(
  3055. oë}”
  3056. °dONLNdˇˇ+Oc HeaderHeight†ô†ó†ú†õ°ñ †ò°ddPro(
  3057. O≈]°dONLNdˇˇ(Y»WindowSpecifier†ô†ó†ú††°§P
  3058. "V#####ˇ#†£
  3059. ‘l£"V##ˇ†°†å††°§P
  3060. "ÅB###'#ˇˇˇˇˇˇÑ
  3061. ’m’m†£
  3062. ‘l£    ÅÏÅBúhÅBCˇÇCDˇÉDFˇÑFGˇÖGHˇÜHJˇáJKˇàKMˇâMNˇäNPˇãPQˇåQSˇçSTˇéTUˇèUWˇêWXˇëXZˇíZ[ˇì[]ˇî]^ˇï^`ˇñ`aˇóabˇòbdˇôdeˇöegˇõghˇúBhˇˇ    ˇˇˇˇˇˇˇˇ"ÅB#'†°††°§P
  3063. "ÅR# ###ˇˇˇˇˇˇÑ
  3064. ’m’m†£
  3065. ‘l£    ÅtÅRçiÅRSˇÇSUˇÉUWˇÑWYˇÖY[ˇÜ[]ˇá]_ˇà_aˇâacˇäceˇãegˇågiˇçRiˇˇ    ˇˇˇˇˇˇˇˇ"ÅR #†°°ddProˇˇˇˇˇˇ    1âqõ°ñ †ò°ddPro$
  3066. ànïÂ
  3067.     †@°dONLNdˇˇ(ëq
  3068. Number of †ô†ò°ddPro$`°dONLNdˇˇ)*VERTICAL†ô†ò°ddPro$ü¿°dONLNdˇˇ)/ pixels†ô†ó†ú°ddPro°ddProˇˇˇˇˇˇ
  3069. ‘l£1óp¢Ô†õ°ñ †ò°ddPro$
  3070. ñm£†@°dONLNdˇˇ(üp
  3071. Number of †ô†ò°ddPro$`°dONLNdˇˇ)*
  3072. HORIZONTAL†ô†ò°ddPro$ @°dONLNdˇˇ)> pixels†ô†ó†ú°ddPro†ç°ddProˇˇˇˇˇˇ
  3073. ‘l£1u¿Éc†õ°ñ †ò°ddPro0
  3074. tΩÑe
  3075.  @°dONLNdˇˇ(¿!Offset between Tools - { 16, 16 }†ô†ó†ú°ddPro°ddProˇˇˇˇˇˇ
  3076. ‘l£1=ΔR†õ°ñ †ò°ddPro$
  3077. <√S
  3078.      @°dONLNdˇˇ(EΔ 8  - Tools Across
  3079. †ô†ò°ddPro$ @°dONLNdˇˇ*
  3080.  8  -  Tools Down †ô†ó†ú°ddPro°ddProˇˇˇˇˇˇ
  3081. ‘l£11¬?6†õ°ñ †ò°ddPro0
  3082. 0ø@9
  3083.  @°dONLNdˇˇ(;¬Size of Matrix - { 8, 8 }†ô†ó†ú°ddPro†å††°§P
  3084.     ˇˇˇˇˇˇˇˇ"?!###'#ˇˇˇˇˇˇÑ
  3085. ’m’m†£
  3086. ‘l£    ÅÏ?!ZG?!"ˇ@"#ˇA#%ˇB%&ˇC&'ˇD')ˇE)*ˇF*,ˇG,-ˇH-/ˇI/0ˇJ02ˇK23ˇL34ˇM46ˇN67ˇO79ˇP9:ˇQ:<ˇR<=ˇS=?ˇT?@ˇU@AˇVACˇWCDˇXDFˇYFGˇZ!Gˇˇ    ˇˇˇˇˇˇˇˇ"?!#'†°††°§P
  3087. "@0# ###ˇˇˇˇˇˇÑ
  3088. ’m’m†£
  3089. ‘l£    Åt@0LG@01ˇA13ˇB35ˇC57ˇD79ˇE9;ˇF;=ˇG=?ˇH?AˇIACˇJCEˇKEGˇL0Gˇˇ    ˇˇˇˇˇˇˇˇ"@0 #†°°ddProˇˇˇˇˇˇ    1HOSµ†õ°ñ †ò°ddPro$
  3090. GLT∏
  3091.     0°dONLNdˇˇ+çNumber of  elements †ô†ò°ddPro$¸0°dONLNdˇˇ)MTALL†ô†ó†ú°ddPro°ddProˇˇˇˇˇˇ
  3092. ‘l£1VOa¿†õ°ñ †ò°ddPro$
  3093. ULb¬0°dONLNdˇˇ(^ONumber of  of elements †ô†ò°ddPro$ªp°dONLNdˇˇ)WWIDE†ô†ó†ú°ddPro†ç†ç†É†ó°ñ†óˇ◊#ˇ ˇˇˇˇ#◊°ñ 
  3094. _,Times
  3095. .ˇ°dONLNdˇˇ(⁄Z38°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)<5¶(QZFExample of a Palette Structure with a single kPalWind palette defined:†ó°ñ,    Monaco
  3096.     °dONLNdH5Ñ@+H global gPaletteList :=°dONLNd_5@)ê{†ó°ñ°dONLNdb@rKx(hê{†ó°ñ°dONLNdjK®V+6 { 'Patterns', 34},°dONLNd~K\V)¥# { Window containing tools,†ó°ñ°dONLNd¢V\aº* # HeaderHeight }†ó°ñ°dONLNdµa®lfi(âΔ    kPalWind,°dONLNd¬a\l∞)¥# Palette type†ó°ñ°dONLNd”l®w“(îΔ{8, 8},°dONLNdfil\w⁄)¥# Size of Tool matrix†ó°ñ°dONLNd˜w®Çÿ(üΔ{16, 16}°dONLNdw\LJ)¥# Offset between tools†ó°ñ°dONLNdÇrçx(™ê}†ó°ñ°dONLNd&çò +¢ };†óˇ$fi◊#ˇ ˇˇˇˇ#◊°ñ 
  3097. _,Times
  3098. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛39†ó°ñ,     Helvetica
  3099. °dONLNd/<>å(YZ Using Tools†ó°ñ
  3100. °dONLNd =<I≥* RDefining the palette structure is only the first step in using the Draw Libraries.†ó°ñ°dONLNd_I<U≤* OBy definition, each palette contains a number of tools. Each one of these tools†ó°ñ°dONLNdØU<a¥* Nmay have a variety of behaviors. Some tools are used for drawing or selecting,†ó°ñ°dONLNd˛a<mØ* Oothers are used to enter text. Tools can be used to render objects of any shape†ó°ñ°dONLNdNm<y†* Jand may allow patterns, line weights, and/or colors. The following section†ó°ñ°dONLNdôy<Ö≠* Mexplains the setup required for using a variety of tools which may or may not†ó°ñ°dONLNdÁÖ<ë* *be used with the palettes described above.†ó°ñ†ó°ñ°dONLNdù<©Õ*VIn order to make use of the Draw Libraries,  tools structures for each tool in a given†ó°ñ°dONLNdj©<µÆ* palette must be defined.†ó°ñ†ó°ñ°ddPro†Ç†å°ñ °ddPro(°öˇ˜
  3101. ‡~◊
  3102. .ˇ[a[a°dONLNdˇˇ+$global  SelectTool :=     °ddPro(°dONLNdˇˇ)l2{ 1,    1,  "Select",   kClick,    0    {2,0,1,1}    °ddPro(°dONLNdˇˇ)¥    °ddPro(°dONLNdˇˇ)$};
  3103. °ddPro(°dONLNdˇˇ(Ù~global  CharTool     °ddPro(°dONLNdˇˇ)H:=     °ddPro(°dONLNdˇˇ)$ { 17,  1,     °ddPro(°dONLNdˇˇ)$/ "Char",     kClick,    0    {gTextStr,1,1,0 }    °ddPro(°dONLNdˇˇ)¥};
  3104. °ddPro(°dONLNdˇˇ(ˇ~global  LineTool     °ddPro(°dONLNdˇˇ)H:=     °ddPro(°dONLNdˇˇ)$ { 6,    1,     °ddPro(°dONLNdˇˇ)$" "Line",      kDrag,    0    {0 }    °ddPro(°dONLNdˇˇ)ê    °ddPro(°dONLNdˇˇ)$};
  3105. °ddPro(°dONLNdˇˇ(
  3106. ~    †ó†å
  3107. ‡~;fl"‹°d
  3108. dPro    †åqÏ Ó  Ó ÏÓ#˘†ç°ddPro
  3109. †ç°ñ °ddPro(°öˇ…ˇ˙
  3110.  Å‹, New York°dONLNdˇˇ+
  3111. Tool Number†ó°ñ °ddPro(°öˇ∑ˇÌ
  3112. é-ı‡ê°dONLNdˇˇ+
  3113. Palette Number†ó†å
  3114. ‡~;fl"#ˆ
  3115. °d
  3116. dPro    †åq
  3117. 
  3118. 
  3119. 
  3120. #͆ç°ddPro
  3121. †ç°ñ °ddPro(°öˇ®ˇØ
  3122. ,Ã;ÈǰdONLNdˇˇ+>    Tool Name†ó†å
  3123. ‡~;fl"3
  3124. °d
  3125. dPro    †åq    "     "      #‹†ç°ddPro
  3126. †ç°ñ °ddPro(°öˇ®ˇ
  3127. ,_;û∫¢°dONLNdˇˇ)ìToolType†ó†å
  3128. ‡~;fl"3]°d
  3129. dPro    †åq
  3130. KO
  3131. MOMK
  3132. M#‡†ç°ddPro
  3133. †ç°ñ °ddPro(°öˇ∏˛ˆ
  3134. Ö,—!U°dONLNdˇˇ((à DblClk Flag†ó†å
  3135. ‡~;fl"#Å‚°d
  3136. dPro    †åq ae ceca c#Ô†ç°ddPro
  3137. †ç°ñ °ddPro(°öˇ…˛fi
  3138.  ùflWU°dONLNdˇˇ(†
  3139. Attributes†ó†å
  3140. ‡~;fl"ôfi°d
  3141. dPro    †åq
  3142. uy
  3143. wywu
  3144. w#¸†ç°ddPro
  3145. †ç†ç†É†ó°ñ†ó°ñ†ó°ñ
  3146. _
  3147. .ˇ°dONLNdá0<?å([Z Tool Number†ó°ñ†ó°ñ
  3148. °dONLNdìF<Rü*MTo access tools in a given palette the location of the tool within the matrix†ó°ñ°dONLNd·R<^¨* Omust be known. In order to do this, the tool number is used as a multiplier. It†ó°ñ°dONLNd1^<j¥* Ris important to number the tools correctly, so that the specified tool will be the†ó°ñ°dONLNdÑj<v}* Cexpected one. Tools are numbered from left to right, top to bottom.†ó°ñ†ó°ñ
  3149.     °dONLNd»Ä<ã`*Example:†ó°ñ°ddPro†Ç†å°ñ °ddPro(°ö#à
  3150. ©î∏fi
  3151. .ˇ>J>J°dONLNdˇˇ+:
  3152. global  SelectTool :=     °ddPro(°dONLNdˇˇ)l{ °ddPro(ÿ°dONLNdˇˇ)1°ddPro(w°dONLNdˇˇ)1,   1,    "Select",   kClick,    0,    {2,0,1,1}    °ddPro(°dONLNdˇˇ)•  }; †ó†å°ñ °ddPro(°ö    k
  3153. ¬ÆÁ¢°dONLNdˇˇ(Œ± Tool Number°ddPro(»¿)O
  3154. °ddPro(°dONLNdˇˇ(Ÿ±Type :  Integer
  3155. °ddPro(°dONLNdˇˇ* <Meaning : Order of the tool in the palette that contains it.†ó†å
  3156. ©îÁfi" 
  3157. °d
  3158. dPro    †åqª
  3159. ¡ª
  3160. ¡¡
  3161. ¡
  3162. ª
  3163. #˜†ç°ddPro
  3164. †ç†ç†ç†É†ó°ñ†Ç
  3165. Á~•Ìò0h¡‡n¡›Á~•Ì—————————————————————
  3166. ÙˆˇÄÎ
  3167. Ùˆ¿Î Ù
  3168. O¯U¿Î Ù ¯¿Î Ù
  3169. H%¯U¿Î Ù ¯¿Î Ù
  3170. H%¯U¿Î Ù ¯¿Î Ù
  3171. O¯U¿Î
  3172. Ùˆ¿Î
  3173. Ùˆˇ¿Î
  3174. Ù˘¿Î
  3175. Ù˘¿Î
  3176. Ù˘¿ÎÙ>˚¿ÎÙ˚¿ÎÙ˚    ¿|Δp¿ÙÙ˘    ¿TC @ÙÙ ‡~¿ΔB•>s0
  3177. ÙÙ‡~¿)Be*O£ÙÙ ‡~¿)Be*L ÙÙ‡~¿8ΔG#*s ÙÙ  ‡~¿ÎÙ ‡~¿ÎÙ     ˇˇ ‡~¿ÎÙ ‡~¿ÎÙ ‡~¿ÌÙ‡~¿ÌÙ ‡~¿0Ì    ¯å‡Ä˛‡~¿@Ì    ®Ü@IJ ‡~¿ÄÌ    !åÖJ|Ê`˛˘¿Ï    "RÑ TüF˛˚¿ Ï    "RÑ Tò@˛˚¿Ï    qåéFTÊ@˛>˚¿`ÏÙ˘¿ÄÏ
  3178. Ù˘√Î
  3179. Ù˘ƒÎ
  3180. Ù ˆˇÿÎÙ @‡?ˇÓ˘8˝ @¿Ó˘˛ @¿Ó¯‡ÛÁ @¿Ó˜ÄÄ8 #ˇ¸Gˇ¯¿ÓˆÄ@"F™∏¿Óı¸Ä"EUX¿Óı¯"F´®¿ÓÙ "EWX¿ÓÙèp"FÆ®¿ÓÙÄ„Ä"EUX¿ÓÙú"F™®¿Ó"ÙP"EUX¿c˝`¸$Ùć"F™®¿! H˝%ÙÄ #ˇ¸Gˇ¯¿`…191å√ò»v&˝Ä˛%ÙÁœ  @¿ó±È)%x–a%(K/K¿˛$Ù@ @¿îQ    %AL°%(M(J˝0    ¿<˛ @¿”8…!90¯pò»s¶%IJ(    P Ä ˛ @¿¸˚@˚     C
  3181. î˘Ã¿x˛ˆˇ¿¸8˚‡˚     D•    î©>垠@¿Ó/    D•    î©0IJ @¿Ä|¿ ˛` ˝-    „å©ÃÄx˛ @¿˝T@Ñ˛ ¸%Ù4‡ @¿òÏΔL|ß«0ÃV!Ø`˛%ÙLê ˇAˇ‡¿ï>)PT®Ñ˘ÚS""˛%ÙLîÄ!B™∞¿ï)LT¶Ñ¡U!§Ä˛%Ù$ö`"EUX¿ îÃ8ΔXTlG0Œ3£/`˛Ù$í"F™®¿ˆ˙˘IJ–"EUX¿ˆ˙¯‡    0Ä"F™®¿Ó%˜¯    `"EUX¿É ¸¯˝&ˆˇÄ"F™®¿˛ÅIJ® ˝%Ùˇ¿"EUX¿ cá'ÒéΔ;åa≥Ùf˛%Ù!B™∞¿Tâ(ôS„%íäÚ|§ï˛%Ù  ˇAˇ‡¿
  3182. Tâ&©Q&íäŃ$ï˛%Ù˛ @¿Sá,]L√π—Å c3e˛Ù @¿˘ ˜Ù @¿˘p˜Ù @¿ÓÙˆˇ¿¿00˚"Ù @¿@ ˚$Ù @¿ q∂√1ú√òstΔqå¿˝$ÙÄ @¿JU‚ö    "|ó§Øê–`˝$Ù    Ä@ @¿
  3183. JU©â"`î$®ëL†˝$Ù
  3184. ¿ ?¿@Ä¿qà¬ü√òst¶p¯p˝Ù ∞CÄ ‡pA™‡¿ÓÙú@!ÄCUP¿ÓÙé‡# F™®¿ÓÙ!G "EUX¿˚ıÙ@á    ‡"F™®¿˝ĘÙÄ     "EUX¿Œgùáboÿ˜ÙÄ    ‡# F™®¿    ÈÙÀƒ≤Ùº˜Ù@'     !ÄCUP¿    ÖJ“ц˜Ù G    ‡ ‡pA™‡¿ ŒdÂá:bZ˜ÙÜ    ‡ ?¿@Ä¿ÙÙ      @¿ÙÙ  @¿ÓÙ‡ @¿ÓÙ @¿Ó
  3185. Ùˆˇ¿ÓÙˇˇ‡@¿ÓÙˇˇ‡@¿ÓÙ¿˛‡@¿ÓÙ@˛Ô‡@¿ÓÙ¿˝Ô‡‡pA¿‡¿ÓÙ¿¸fl·àCqP¿ÓÙ¿˚‚FÆ®¿ÓÙ¿˚ø‚EUX¿ÓÙ¿˜ø‚F™®¿ÓÙ¯˜‚GUX¿ÓÙ˛ Ô·B™∞¿ÓÙ¯Óˇ·CU`¿ÓÙ˛ Êˇ‡Ä A™¿¿ÓÙ˛ ·ˇ‡`¿@’Ä¿ÓÙ˛ „ˇ‡@>¿ÓÙ
  3186. ®Áˇ‡@¿ÓÙXÔˇ‡@¿ÓÙ?ˇˇ‡@¿ÓÙˇˇ‡@¿Ó
  3187. Ùˆˇ¿ÓÙ @¿ÓÙ @¿ÓÙÄ @¿ÓÙ¿˛ @¿ÓÙ¿ ¯@?¿ÓÙ‡ 0@j∞¿ÓÙ‡  `0@’`¿ÓÙp ¿`A™¿¿ÓÙp,!Ä¿CUÄ¿ÓÙ 8 X#ÄF´¿ÓÙ8@∞"ÄEW¿ÓÙˇ`"¿F´Ä¿Óٸſ"`EU¿¿ÓÙ0ÅÄ"0F™‡¿ÓÙ0ˇ#ˇGˇ‡¿ÓÙ` @¿¿ÓÙ‡ê @ ¿ÓÙ    – @¿ÓÙ @ ¿Ó
  3188. Ùˆˇ¿Ó
  3189. Ùˆˇ¿?ˇÓËÄÎË`ÎËÎËÎËÎËÎÁÄÏÁ@ÏÁ0ÏÁÏÁÏÁÏÁÄÌ————Ê|Δp¿pıÊTC @àıÊΔB•>s0àıÊ)Be*O£àıÊ)Be*L àıÊ8ΔG#*s pı——————†É†óˇÑ◊#ˇ ˇˇˇˇ#◊°ñ 
  3190. _,Times
  3191. .ˇ°dONLNdˇˇ(⁄Z40°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)N5û(QlPalette Number†ó°ñ†ó°ñ°dONLNdD<P„(lZXPalettes are numbered based on the order in which they appear in the global gPaletteList†ó°ñ°dONLNdhP<\“* X(or Palette Structure). All of the information concerning the actual selection of a tool†ó°ñ°dONLNd¡\<hÍ* ]from a palette is contained within the Palette Structure (detailed in the preceding section).†ó°ñ°dONLNdh<t≈* RSeveral routines within the Draw Libraries also need to access palette information†ó°ñ°dONLNdst<Ä…* S<SetPattern, SetLine, SetColor>. In order to do so, they must index into the Global†ó°ñ°dONLNd«Ä<å÷* ZgPaletteList. Since palette information is specific to a particular palette, accessing the†ó°ñ°dONLNd"å<òÓ* (correct palette information is critical.†ó°ñ†ó°ñ°dONLNdL§<∞„*\Once the global gPaletteList  (or Palette Structure) is setup, global variables indicate the†ó°ñ°dONLNd©∞<º* Eorder in which palette information is specified within the Structure.†ó°ñ†ó°ñ°dONLNd»<‘7*2Set the following global variables as appropriate:†ó°ñ,    Monaco
  3192.     °dONLNd$‘Ñfl,+H global kToolPaletteNum := 1;†ó°ñ°dONLNdCflÑÍ2* global kColorPaletteNum := 2;†ó°ñ°dONLNdbÍÑı>* global kPatternPaletteNum := 3;†ó°ñ°dONLNdÉıÑ,* global kLinePaletteNum := 4;†ó°ñ†ó°ñ
  3193. °dONLNd† <Ê(3ZYThe number assigned to each of the above palette globals has to correspond to its ordinal†ó°ñ°dONLNd˙<#]* @position within the list of palettes that you defined in global 
  3194.     °dONLNd:^"¶(?| gPaletteList
  3195. °dONLNdF¶#fi)H. (i.e. If you†ó°ñ°dONLNdU#</¸(KZ,define the tool palette first in the global 
  3196.     °dONLNdÅ#˝.K)¡
  3197. gPaletteList,
  3198. °dONLNdé#K/’)N the global kToolPaletteNum†ó°ñ°dONLNd™/<;k(WZ=should be set to 1.)  See the sample QuickLook in Appendix B.†ó°ñ†ó°ñ†ó°ñ
  3199.     °dONLNdËQ<\`*!Example:†ó°ñ°ddPro†Ç†å°ñ °ddPro(°öˇı
  3200. z~â»
  3201. .ˇIJIJ°dONLNdˇˇ+$
  3202. global  SelectTool :=     °ddPro(°dONLNdˇˇ)l{ 1,   °ddPro(, New Yorkÿ°dONLNdˇˇ)1,°ddPro(@°dONLNdˇˇ) /    "Select",   kClick,    0,    {2,0,1,1}  }; †ó†å°ñ °ddPro(°öˇ€ˇ„
  3203. ìò√∫°dONLNdˇˇ(üõPalette Number°ddPro(ô¿)^
  3204. °ddPro(°dONLNdˇˇ(™õType :  Integer
  3205. °ddPro(°dONLNdˇˇ* HMeaning : Order in which the palette that contains the tool appears in     °ddPro(°dONLNdˇˇ*     °ddPro(°dONLNdˇˇ)$   the global gPaletteList†ó†å
  3206. z~√»"ú˝
  3207. °d
  3208. dPro    †åqçì    çì    ììç#˜†ç°ddPro
  3209. †ç†ç†ç†É†ó°ñ†ó°ñ
  3210. _
  3211. .ˇ°dONLNdÛ≥NøÜ(€l    Tool Name†ó°ñ†ó°ñ°dONLNd˝Œ<⁄œ(ˆZVThe Tool Name field within a tool structure is used for logging purposes so that it is†ó°ñ°dONLNdT⁄<ÊÚ* ^possible to differentiate between tools other than by number. Set this field to a string which†ó°ñ°dONLNd≥Ê<Ú‚* %is descriptive of the tools function.†ó°ñ†ó°ñ
  3212.     °dONLNdŸ¸<`*Example:†ó°ñ°ddPro†Ç†å°ñ °ddPro(°öˇı
  3213. %~4À
  3214. .ˇ@T@T°dONLNdˇˇ+$
  3215. global  SelectTool :=     °ddPro(°dONLNdˇˇ)l{ 1,   1°ddPro(ÿ°dONLNdˇˇ),°ddPro(’°dONLNdˇˇ)    °ddPro(’°dONLNdˇˇ)
  3216. "Select"°ddPro(ÊİdONLNdˇˇ)0#,   kClick,    0,    {2,0,1,1}  }; †ó†å°ñ °ddPro(°öˇŸˇ’
  3217. @¶e“°dONLNdˇˇ(L©    Tool Name°ddPro(,°dONLNdˇˇ)A 
  3218. °ddPro(°dONLNdˇˇ(W©    °ddPro(°dONLNdˇˇ)$Type :  "String" 
  3219. °ddPro(°dONLNdˇˇ(b©    °ddPro(°dONLNdˇˇ)$BMeaning : Any string that describes the functionality of the tool.†ó†å
  3220. %~e“"FÍ4°d
  3221. dPro    †åq28!28!882#Ú†ç°ddPro
  3222. †ç†ç†ç†É†óˇ!~◊#ˇ ˇˇˇˇ#◊°ñ 
  3223. _,Times
  3224. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛41†ó°ñ°dONLNd)N5Ç(Ql    Tool Type†ó°ñ†ó°ñ°dONLNd
  3225. D<P„(lZZThe Tool Type field within a tool structure is one of the most important fields because it†ó°ñ°dONLNdeP<\Ú* _indicates how to use the tool once it has been selected. There are five types of tools that the†ó°ñ°dONLNd≈\<h◊* SDraw Libraries currently function with: kClick, kDrag, kMultiClick, and kMultiDrag,†ó°ñ°dONLNdh<tv* kDragClick.†ó°ñ†ó°ñ
  3226. °dONLNd%Ä`åã+$ 0 (Zero)  -°dONLNd1Ä«åº)g@Tool does not have a type, tool will be selected but not 'used'.†ó°ñ†ó°ñ°dONLNdrñ`¢Ç(æ~kClick -°dONLNd{ñ«¢fi)gGTools that only require the user to move to the desired destination and†ó°ñ°dONLNd√°«≠ñ* 4click the mouse button, are considered kClick tools.†ó°ñ†ó°ñ°dONLNd˘∑`√É(fl~kDrag - °dONLNd∑«√’)gCTools that require the user to press the mouse button move to a new†ó°ñ°dONLNdF¬«Œ∑* <location, and release the mouse, are considered kDrag tools.†ó°ñ†ó°ñ°dONLNdÉÿ`‰ü(~kMultiClick -  °dONLNdìÿ«‰)gMTools that require the user to click to initiate the tool, move to any number†ó°ñ°dONLNd·„«ÔÒ* Mof new locations, clicking at all corner points, and then double click to end†ó°ñ°dONLNd/Ó«˙y* -(optional), are considered kMultiClick tools.†ó°ñ†ó°ñ°dONLNd]`õ(,~
  3227. kMultiDrag - °dONLNdk«Ú)gITools that require the user to press the mouse, move to any number of new†ó°ñ°dONLNdµ«* Ilocations, and release the mouse button to end, are considered kMultiDrag†ó°ñ°dONLNdˇ«&‹* tools.†ó°ñ†ó°ñ°dONLNd1`=ö(Y~
  3228. kDragClick - °dONLNd1«=ÿ)gDTools that require the user to press the mouse button, move to a new†ó°ñ°dONLNdY<«HÒ* Jlocation and release the mouse, then click the mouse button are considered†ó°ñ°dONLNd§G«S* kDragClick tools.†ó°ñ†ó°ñ
  3229. °dONLNd∂^<jS(ÜZNote{İdONLNd∫^TjÎ)Y: It is possible to specify whether a double click is necessary to end for any tool type.†ó°ñ†ó°ñ
  3230.     °dONLNdv<Å`(ùZExample:†ó°ñ°ddPro†Ç†å°ñ °ddPro(°öc
  3231. ü~Æ»
  3232. .ˇ)J)J°dONLNdˇˇ+$
  3233. global  SelectTool :=     °ddPro(°dONLNdˇˇ)l{ 1,   1°ddPro(, New Yorkÿ°dONLNdˇˇ),°ddPro(’°dONLNdˇˇ)    "Select",   °ddPro(n°dONLNdˇˇ)5kClick°ddPro(?°dONLNdˇˇ)&,    0,    {2,0,1,1}  }; †ó†å°ñ °ddPro(°öH”
  3234. π™»Ì°dONLNdˇˇ(≈≠    Tool Type†ó†å
  3235. ü~»»"¬Ôd°d
  3236. dPro    †åqÆP¥UÆS¥U¥S¥PÆS"¡SÛ†ç°ddPro
  3237. †ç†ç†ç†É†ó°ñ†ó°ñ°ddPro†Ç†å°ñ °ddPro0°öïˇ—
  3238. eó
  3239. √ô√ô°dONLNdˇˇ+p´ KMULTICLICK°ddPro(
  3240. ÿ°dONLNdˇˇ)Y TOOL°ddPro(=İdONLNdˇˇ)  - In order to use this type °ddPro(°dONLNdˇˇ(|9of tool you must move to a point and click, then move to °ddPro(°dONLNdˇˇ* 9a new point and click at every corner point, then double °ddPro(°dONLNdˇˇ*
  3241. click to end.†ó†å
  3242. ‘ióò ıÉuıÉuˇíçÚı˜ˇ¸@˜j*˘™Æ@A¯jA*˘™Æ@A¯jA*˘™Æ@A¯j*˘™Æ@˜˜ˇ˛    @Ä˙    @Ä˙    @Ä˙ @Ä¸ @㏠@Ä@¸    @Ä˙
  3243. @Å@Ü
  3244. @Ä@Ü
  3245. @Å@Ü
  3246. @Ä@Ü
  3247. @Å@Ü
  3248. @Ä@Ü
  3249. Oˇ¯Å@Ü
  3250. @Ä@Ü
  3251. @Å@Ü
  3252. @Ä@Ü
  3253. @Å@Ü
  3254. @Ä@Ü
  3255. @Å@Ü    @Ä˙ @Ä@¸ @㏠@Ä¸    @Ä˙    @Ä˙    @Ä˙_˜ˇ˛
  3256. @Ä
  3257. @Ä
  3258. @Ä
  3259. Gü8Ä?Å
  3260. DÅ¿aˇ‚?ˇΔ
  3261. DÇ"5UF
  3262. @Ñ"*™Δ
  3263. @à"5UF
  3264. Dàa"*™Δ
  3265. DàÅ"5UF
  3266. Dá"*™Δ
  3267. @å‡"5UF
  3268. @äÄ"*™Δ
  3269. Dá"5UF
  3270. DŎ‚?ˇΔ
  3271. G>xÅ
  3272. @Ç
  3273. @Ä
  3274. @ʡ˛
  3275. @Ä
  3276. @Ä
  3277. @Ä
  3278. AßÄ
  3279. BdÄġǡ
  3280. Bd†åBUÜ
  3281. A$–É"*™Δ
  3282. A$êÄ¿"5UF
  3283. FÄêÄ0"*™Δ
  3284. IÄÄ "5UF
  3285. HÄ Ä"*™Δ
  3286. D Ä¡"5UF
  3287. B Ä1"*™Δ
  3288. B@ÄBUÜ
  3289. A@ġǡ
  3290. @˛Ä
  3291. @@ÄÄ
  3292. @@ÄÄ
  3293. @ʡ˛
  3294. @Ä
  3295. @8Ä
  3296. @Dà
  3297. @LÇ
  3298. @Và®˛¸
  3299. @eÄÇÇ
  3300. W
  3301. @D‡à" ¬™Ü
  3302. @ÑpÄb5UF
  3303. A
  3304. 8ÄA"*™Δ
  3305. B8ÄO"5UF
  3306. DxÄI"*™Δ
  3307. D∏ÄOb5UF
  3308. B8ÄI ¬™Ü
  3309. A8ÄOÇ
  3310. W
  3311. @Ñ0ÄO˛¸
  3312. @H ÄA
  3313. @0ÄA
  3314. @Ä
  3315. @ʡ˛
  3316. @˛ˇ
  3317. @˛ˇ
  3318. @ˇˇ
  3319. @
  3320. ˇ˜
  3321. @ˇÔÇ
  3322. @ˇÊˇƒBäÜ
  3323. @ˇÿˇ8"5uF
  3324. @ˇ›ˇ"*™Δ
  3325. @ˇΩˇ"5UF
  3326. @¿ˇªˇ":™Δ ˛@ˇ{ˇBUÜ
  3327. @¿ˇwˇÇ´ ˛@ˇ7ˇ
  3328. V ˛@ˇˇ¨ ˛@ˇˇ¯
  3329. @U@ˇ?ˇ
  3330. @™¿ˇˇ
  3331. AˇÄ˛ˇ
  3332. @˛ˇ˜ˇ˛
  3333. @Ä
  3334. @Ä
  3335. @Ä
  3336. @ÄÒ
  3337. @ġ¬ˇÜ
  3338. @Ä9ĬUÜ
  3339. @Ä YÇ´
  3340. @3ÄÄ@±
  3341. V
  3342. @#ÄÄÅa ¨
  3343. @a¿Å¡ 5X
  3344. @A¿ÇÅ *∏
  3345. @¿‡á˚5\
  3346. @ˇ‡Ñ*Æ
  3347. AÄpÑ Ç5W
  3348. AÄpá¯ˇÇ?ˇ
  3349. C8Ä
  3350. G<Ä
  3351. OIJÄ
  3352. @ʡ˛˜ˇ˛ı°ñ °ddPro0°ö'Ö
  3353. ‘iÌ%
  3354. °dONLNdˇˇ(fiiKCLICK°ddPro(
  3355. ,İdONLNdˇˇ)1 Tool°ddPro(@°dONLNdˇˇ)  - In order to use this type of °ddPro(°dONLNdˇˇ(Íi(tool you must move to a point and click.†ó°ñ °ddPro0°ö‹ˇ–
  3356. ]Î
  3357. °dONLNdˇˇ+µ?
  3358. KMULTIDRAG°ddPro(
  3359. ÷°dONLNdˇˇ)U TOOL°ddPro(;İdONLNdˇˇ)  - In order to use this °ddPro(°dONLNdˇˇ(50type of tool you must move to a point and press °ddPro(°dONLNdˇˇ* ,the mouse, keeping the mouse button pressed °ddPro(°dONLNdˇˇ* 1while moving between points and then release the °ddPro(°dONLNdˇˇ* mouse when finished.†ó†å
  3360. ‘ió ÚtÅt°d
  3361. dPro    †åq~äÉëÅëÉäÅä~äÅë#†ç°ddPro
  3362. °d
  3363. dPro    †åqWã\íZí\ãZãWãZí"Zu†ç°ddPro
  3364. †ç†å°d
  3365. dPro    †åqc”hŸf”cŸfŸhŸf”"fŸ7†ç°ddPro
  3366. #ø#°d
  3367. dPro    †åqkÌpÛpÌkÚnÛpÛpÌ"nÛ¯†ç°ddPro
  3368. †ç"m†å°d
  3369. dPro    †åqà…éŒàÃéŒéÃé…àÃ"éÆç°ddPro
  3370. #K#◊°d
  3371. dPro    †åqà·éÊà‰éÊé‰é·à‰"鉆ç°ddPro
  3372. †ç†å°ñ °ddPro0°öˇ—
  3373. ‰
  3374. °dONLNdˇˇ(KDRAG°ddPro(
  3375. *İdONLNdˇˇ)- TOOL°ddPro(ê°dONLNdˇˇ)  - In order to use this type of °ddPro(°dONLNdˇˇ(¸,tool you must move to a point and press the °ddPro(°dONLNdˇˇ* 0mouse, then move to a new point and release the °ddPro(°dONLNdˇˇ* mouse.†ó°d
  3376. dPro    †å
  3377. ‘ióqOÌTÛRÌOÛRÛTÛRÌ"RÛ †ç°ddPro
  3378. #ü#°d
  3379. dPro    †åq;Ï@Ú>Ï;Ú>Ú@Ú>Ï">Ú
  3380. †ç°ddPro
  3381. °d
  3382. dPro    †åq&Ï+Ú)Ï&Ú)Ú+Ú)Ï")Ú
  3383. †ç°ddPro
  3384. †ç†ç†ç†É†óˇh◊#ˇ ˇˇˇˇ#◊°ñ 
  3385. _,Times
  3386. .ˇ°dONLNdˇˇ(⁄Z42°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)N5ä(Ql
  3387. DblClkFlag†ó°ñ†ó°ñ°dONLNd D<P‰(lZZThe DblClkFlag field within a tool structure is used to indicate whether a double click is†ó°ñ°dONLNdfP<\‡* Wnecessary to end usage of the tool. Setting the DblClkFlag (nonZero) indicates a double†ó°ñ°dONLNdæ\<h◊* Xclick is necessary, and when the last point of an object is drawn a double click will be†ó°ñ°dONLNdh<tÁ* [issued by Virtual User. Setting the DblClkFlag to 0 (Zero) indicates that a double click is†ó°ñ°dONLNdst<ÄM* 9not necessary and one will not be issued by Virtual User.†ó°ñ†ó°ñ
  3388.     °dONLNd≠ä<ï`*Example:†ó°ñ°ddPro†Ç†å°ñ °ddPro(°öfiÌ
  3389. ≥~¬»
  3390. .ˇ>J>J°dONLNdˇˇ+$
  3391. global  SelectTool :=     °ddPro(°dONLNdˇˇ)l{ 1,   1°ddPro(, New Yorkÿ°dONLNdˇˇ),°ddPro(’°dONLNdˇˇ)    "Select",   kClick,    °ddPro(ò@°dONLNdˇˇ)\0°ddPro(BİdONLNdˇˇ),    {2,0,1,1}  }; †ó°ñ °ddPro(°ö≈•
  3392. À√€ °dONLNdˇˇ(◊Δ
  3393. DblClkFlag†ó°ñ °ddPro(°öπ•
  3394. Ÿ√Òß°dONLNdˇˇ* 6  0 := Do not need to double click to end tool usage.
  3395. °ddPro(°dONLNdˇˇ* .  1 := Need to double click to end tool usage.†ó
  3396. ≥~Ò»"“ _°d
  3397. dPro    †åq¿g«l¿j«l«j«g¿j"—jˆ†ç°ddPro
  3398. †ç†É†ó°ñ†ó°ñ
  3399. _
  3400. .ˇ°dONLNd∏‹NËÇ(l
  3401. Attributes†ó°ñ†ó°ñ°dONLNd√˜<Œ(ZUThe Attributes field within a tool structure is one of the more complex fields mostly†ó°ñ°dONLNd<“* Tbecause the first element has several meanings. As mentioned briefly in the previous†ó°ñ°dONLNdn<ƒ* Rsection (more to come in the following section) tools can be associated with Text,†ó°ñ°dONLNd¡<'‰* [Patterns, Line weights and Colors. The flags within the Attributes field deal with a tool's†ó°ñ°dONLNd'<3ÿ* #ability to handle these attributes.†ó°ñ†ó°ñ°dONLNdB?<KÎ*^The first element indicates when/if to set specific attributes concerning an object that is to†ó°ñ°dONLNd°K<W’* [be created with the tool. It can be set to four valid settings: 0 (Zero) indicates the tool†ó°ñ°dONLNd˝W<c‹* Zdoes not accept any attributes (no patterns, no line weights, and no colors),  1 indicates†ó°ñ°dONLNdXc<o‡* _that at least 1 of the attributes is appropriate, and that the attribute(s) should be set prior†ó°ñ°dONLNd∏o<{Ë* ato drawing the object (after selecting the tool),   2 indicates that at least 1 of the attributes†ó°ñ°dONLNd{<áÀ* Vis appropriate, and that the attribute(s) should be set after drawing the object (many†ó°ñ°dONLNdqá<ìË* ^objects stay selected after drawing),  a text string indicates that the string should be typed†ó°ñ°dONLNd–ì<ü≤* after the object is drawn.†ó°ñ†ó°ñ°dONLNdÏ´<∑Â*WAll of the flags (PatternFlag, LineWeightsFlag, ColorFlag) function in the same manner.†ó°ñ°dONLNdD∑<√‰* aIf the flag is set (nonZero) then the attribute is appropriate for that tool.. If the flag is not†ó°ñ°dONLNd¶√<œ„* ^set (Zero) than the attribute does not apply to the tool. It is important to realize that even†ó°ñ°dONLNdœ<€‚* cif the indicator is set to a 'string', attributes can still apply. Also if the indicator is not set†ó°ñ°dONLNdi€<Á„* ](Zero), all of the other flags will be ignored (therefore setting the Attributes Field to {0}†ó°ñ°dONLNd«Á<Û∑* Uis identical to setting it to {0,0,0,0}, or for that matter {1,0,0,0} and {2,0,0,0}).†ó°ñ†ó°ñ
  3402.     °dONLNd˝<`*Example:†ó°ñ†ó°ñ°ddPro†Ç†åˇˇˇˇˇˇ
  3403. 0~Æ˚    10vY‡    ˇˇˇˇˇˇˇˇ8°ñ °ddPro(°öÿç
  3404. 0Éd˚
  3405. .ˇ~}~}°dONLNdˇˇ+,global  SelectTool :=     °ddPro(°dONLNdˇˇ)l({ 1,    1,  "Select",   kClick,    0    °ddPro(ê°dONLNdˇˇ)Ü    {2,0,1,1}°ddPro(A@°dONLNdˇˇ)6    °ddPro(°dONLNdˇˇ)    °ddPro(°dONLNdˇˇ)$};
  3406. °ddPro(°dONLNdˇˇ(HÜglobal  CharTool     °ddPro(°dONLNdˇˇ)H:=     °ddPro(°dONLNdˇˇ)$ { 17,  1,     °ddPro(°dONLNdˇˇ)$ "Char",     kClick,    0    °ddPro(ƒÄ°dONLNdˇˇ)c{gTextStr,1,1,0 }°ddPro(tİdONLNdˇˇ)f    °ddPro(°dONLNdˇˇ)};
  3407. °ddPro(°dONLNdˇˇ(UÜglobal  LineTool     °ddPro(°dONLNdˇˇ)H:=     °ddPro(°dONLNdˇˇ)$ { 6,    1,     °ddPro(°dONLNdˇˇ)$ "Line",      kDrag,    0   °ddPro(˙¿°dONLNdˇˇ)` {0 }°ddPro(@°dONLNdˇˇ)    °ddPro(°dONLNdˇˇ)    °ddPro(°dONLNdˇˇ)$    °ddPro(°dONLNdˇˇ)$};
  3408. °ddPro(°dONLNdˇˇ(`Ü    †ó°ñ °ddPro0°ö´*
  3409. ZÊm4
  3410. ‡°dONLNdˇˇ+c
  3411. Attributes†ó°d
  3412. dPro    †å
  3413. 0~Æ˚qVk\sYs\lYkVkYs"_65˙†ç°ddPro
  3414. °ñ °ddPro(°ö†+
  3415. gÂwÃ
  3416. °dONLNdˇˇ(sË
  3417. {Indicator°ddPro(d¿°dONLNdˇˇ)),°ddPro(m°dONLNdˇˇ)) PatternFlag, LineWeightsFlag, ColorFlag}†óˇˇˇˇˇˇ
  3418. 0~Æ˚    1}~≠    ˇˇˇˇˇˇˇˇ8°ñ °ddPro(°öãê
  3419. ~Ä≠$dS°dONLNdˇˇ(àÉ0 := No Attributes    °ddPro(dS°dONLNdˇˇ)l    °ddPro(dS)$
  3420. °ddPro(dS°dONLNdˇˇ(ìÉ := Set Prior to Drawing     °ddPro(dS)l
  3421. °ddPro(dS°dONLNdˇˇ(ûÉ2:= Set After Drawing
  3422. °ddPro(dS°dONLNdˇˇ* %"String" := Type String after drawing†ó°d
  3423. dPro    †å
  3424. 0~Æ˚qs˚zs˛zz˛z˚s˛"|˛˛†ç°ddPro
  3425. †ç†É†óˇ◊#ˇ ˇˇˇˇ#◊°ñ 
  3426. _,Times
  3427. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛43†ó°ñ°dONLNd)N5…(QlDirect Coordinate Tools†ó°ñ†ó°ñ°dONLNdA<Mò(iZDirect Coordinatet°dONLNd)AôMÂ)]H tools are tools that require selection by coordinate instead of through†ó°ñ°dONLNdrM<YÊ(uZ]a palette structure. This may be required if tools are not contained within a palette, or the†ó°ñ°dONLNd–Y<e‚* \tools do not fit the rule of being the same size and same distance apart. It is important to†ó°ñ°dONLNd-e<qÊ* ]realize the only thing that changes is the method of selecting the tool. The tool retains all†ó°ñ°dONLNdãq<}À* Vof its other characteristics. Since Direct Coordinate tools are not contained within a†ó°ñ°dONLNd‚}<âÍ* Zpalette the structure element for Palette Number has a new meaning. This field is used for†ó°ñ°dONLNd=â<ïË* \the coordinates for the point that when clicked will select the tool. These can be in global†ó°ñ°dONLNdöï<°·* Ycoordinates (default) or relative to the front document window by setting a relativeFlag.†ó°ñ†ó°ñ
  3428.     °dONLNdÙ´<∂`*Example:†ó°ñ†ó°ñ°ddPro†Ç†å°ñ °ddPro(°öϺ
  3429. fil̿
  3430. .ˇ,T,T°dONLNdˇˇ+#global  SelectTool :=    { 1,     {°ddPro(, New York’@°dONLNdˇˇ)~100,50°ddPro(0¿°dONLNdˇˇ)+},    "Select",    °ddPro(°dONLNdˇˇ)S    kClick,     °ddPro(°dONLNdˇˇ)$ 0,    {0 }    °ddPro(°dONLNdˇˇ)$   };†ó°ñ °ddPro(°öŸÆ
  3431. Úw
  3432. °dONLNdˇˇ(¸zPoint where tool is located 
  3433. °ddPro(°dONLNdˇˇ*  Default is in Global Coordinates†ó†å
  3434. fil
  3435. ¿"˘Î°d
  3436. dPro    †åq¯˜˝˚˜˝˜˚˜¯˚#˛†ç°ddPro
  3437. †ç†å"°d
  3438. dPro    †åq˜˜˜˜#Ú†ç°ddPro
  3439. †ç†ç†É†ó°ñ†ó°ñ†ó°ñ°d WORDEä°ñ 
  3440. lcˆ.ˇEäEä°dONLNdˇˇ(*lTglobal  SelectTool :=    { 1,     {100,50,1},    "Select",    kClick,     0,    {0 }       };†ó°ñ @°dONLNdˇˇ+Point where tool is located 
  3441. 3°dONLNdˇˇ* RelativeFlag†ó"9Èt,˙3ˇ,˝3ˇ3˝3˙,˝#˙"E∂ft,3,333,#Ó°ñ °dONLNdˇˇ+
  3442. Q1 := the coordinates will be relative to the TopLeft corner of the front window.
  3443. -İdONLNdˇˇ* S2 := the coordinates will be relative to the BottomLeft corner of the front window.†ó†ó°ñ†ó°ñ
  3444. _,     Helvetica
  3445. °dONLNd\<kö(ÜZ
  3446. Using Objects†ó°ñ
  3447. °dONLNdj<v‰* YAs discussed briefly in the previous section,  drawing tools can behave in different ways†ó°ñ°dONLNdkv<ÇÏ* ]within the same application, not to mention other applications. A different set of attributes†ó°ñ°dONLNd…Ç<é‚* "may apply for any given tool. The °dONLNdÎÇ„é9)ßObject StructureİdONLNd˚Ç:éÌ)W) is used to specify the attributes to set†ó°ñ°dONLNd%é<ö…(∂Zwhen drawing a given object.†ó°ñ†ó°ñ°dONLNdB¶<≤€*WThe elements within an object structure include: (1) Tool Structure (see Tool Structure†ó°ñ°dONLNdö≤<æñ* Msection), (2) Pointlist  (3) PatStruct, (4) LineStruct,  and (5) ColorStruct.†ó°ñ†ó°ñ°dONLNdË <÷«*Example Object Structure:†ó°ñ,    Monaco
  3448.     °dONLNd÷`·¥+$ MyObject  :=  °dONLNd÷÷“)l{†ó°ñ°dONLNd·ÑÏ(    ¢global LineTool,  °dONLNd)·8Ïò)¥# Tool Structure†ó°ñ°dONLNd;Ïј(¢{{100,50}, {50,100}},°dONLNdRÏ8˜Ä)¥ # Point List†ó°ñ°dONLNda˜Ñ¸(¢{15, 2, 'Pattern'}, °dONLNdw˜8z)¥ # PatStruct†ó°ñ°dONLNdÑÑ
  3449. ‰(*¢{6, 3, 'Line'}, °dONLNdó8
  3450. Ä)¥ # LineStruct†ó°ñ°dONLNd•
  3451. щ(5¢{24, 4, 'Color'}°dONLNd∏
  3452. 8Ü)¥
  3453. # ColorStruct†ó°ñ°dONLNd…Ã#ÿ(@Í};†ó°ñ†ó°ñ†ó°ñ°ddPro†Ç†åˇˇˇˇˇˇ
  3454. VZó    1WEgä    ˇˇˇˇˇˇˇˇ8ˇˇˇˇˇˇ    1XèfΔ    ˇˇˇˇˇˇˇˇ8ˇˇˇˇˇˇ    1VÀe    ˇˇˇˇˇˇˇˇ8ˇˇˇˇˇˇ    1WÎg=    ˇˇˇˇˇˇˇˇ8°ñ °ddPro(°öˇÙ
  3455. XZf
  3456. .ˇA∏A∏°dONLNdˇˇ(bZnMyObject  :=   { global LineTool, { {100,50}, {50,100} },{15, 2, ‘Pattern’}, {6, 3, ‘Line’}, {24, 4, ‘Color}};†ó°ñ °ddPro(°öˇ‡ˇ¯
  3457. j_z¬°dONLNdˇˇ+Tool Structure †ó°ñ °ddPro(°öˇœˇØ
  3458. {®ãϰdONLNdˇˇ+I Point List †ó°ñ °ddPro(°öˇ€˛ï
  3459. o¬°dONLNdˇˇ({≈ ColorStruct†ó°ñ °ddPro(°öˇ–˛¨
  3460. z´ä°dONLNdˇˇ(ÜÆ
  3461. LineStruct†ó°ñ °ddPro(°öˇ¬˛Õ
  3462. àäóðdONLNdˇˇ(îç
  3463.  PatStruct†ó
  3464. VZó"q¡
  3465. °d
  3466. dPro    †åqfÀm–fŒm–mŒmÀfŒ#¸†ç°ddPro
  3467. "ÉÏ(°d
  3468. dPro    †åqovovvvo"ÇÙ†ç°ddPro
  3469. °d
  3470. dPro    †åqg‡nÂg„nÂn„n‡g„"p„˛†ç°ddPro
  3471. "Å߯°d
  3472. dPro    †åqjúq°jüq°qüqújü#†ç°ddPro
  3473. "ëàfl°d
  3474. dPro    †åqjdqijgqiqgqdjg#‡†ç°ddPro
  3475. †ç†É†óˇ
  3476. l◊#ˇ ˇˇˇˇ#◊°ñ 
  3477. _,Times
  3478. .ˇ°dONLNdˇˇ(⁄Z44°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)<5´(QZIIn the example Object Structure above, the specified course of action is:†ó°ñ°dONLNdL5`A‘+$ 1)  Select the Line Tool.†ó°ñ°dONLNdgA`MÔ* X2)  Select the 15th element in the Pattern palette (2nd palette struct in gPaletteList).†ó°ñ°dONLNd¡M`Yò* E3)  Select the 6th element in the Line palette (3rd palette struct in†ó°ñ°dONLNdYre≤+ gPaletteList).†ó°ñ°dONLNde`q£(ç~G4)  Select the 24th element in the Color palette (4rd palette struct in†ó°ñ°dONLNd_qr}≤+ gPaletteList).†ó°ñ°dONLNdo}`â•(•~H5)   Move to the point (100, 50), relative to the top left corner of the†ó°ñ°dONLNd∏ârï!+  document window, and pressMouse.†ó°ñ°dONLNd⁄ï`°ì(Ω~D6)  Move to point (50, 100) , relative to the top left corner of the†ó°ñ°dONLNd°r≠*+ "document window, and releaseMouse.†ó°ñ†ó°ñ°dONLNdBπ<≈}(·Z Assumptions@°dONLNdMπ~≈´)BC: All the Attributes flags in the tool structure are set (nonZero),†ó°ñ°dONLNdí≈r—ö(ÌêDand that the first Attributes flag (the Indicator flag) is set to 1,†ó°ñ°dONLNd◊—r›Æ* Eindicating that attributes should be set prior to drawing the object.†ó°ñ†ó°ñ†ó°ñ°dONLNdˆNû(lTool Structures†ó°ñ†ó°ñ°dONLNd.<?(6Z5See the Tool Structures section previously mentioned.†ó°ñ†ó°ñ†ó°ñ°dONLNdd5NA}+'    PointList†ó°ñ†ó°ñ°dONLNdnM<Y¥(uZNPointLists are lists of points (within the current document window) which will†ó°ñ°dONLNdΩY<e * define the object to be drawn.†ó°ñ°dONLNd‹e<qc* ?- Tools that are defined as type kClick require only one point.†ó°ñ°dONLNdq<}N* :- Tools that are defined as type kDrag require two points.†ó°ñ°dONLNdW}<âô* I- All multi-point tools (kMultiClick and kMultiDrag) require at least two†ó°ñ°dONLNd°âEïb+     points
  3479. ’¿°dONLNdßâbïg). 
  3480. ’¿°dONLNd©âgï)See gNumPoints in Appendix G.†ó°ñ†óˇ,◊#ˇ ˇˇˇˇ#◊°ñ 
  3481. _,Times
  3482. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛45†ó°ñ°dONLNd)N5∂(QlAttribute Structures†ó°ñ°dONLNd5NAˇ* "PatStruct, LineStruct, ColorStruct†ó°ñ†ó°ñ°dONLNd8M<YÅ(uZGThe last three elements of an object structure are attribute structures
  3483. S@°dONLNdMÇYá(u†. 
  3484. S@°dONLNdÅMáY≤)    Different†ó°ñ°dONLNdãY<eË(ÅZ&attributes will apply to various tools
  3485. vİdONLNd±YÈeÓ)≠. 
  3486. vİdONLNd≥YÓe≠)(Attributes have been defined as Pattern,†ó°ñ°dONLNd‹e<qõ(çZJLine and Color,  however these are merely labels and any attribute that is†ó°ñ°dONLNd'q<} * ,selected from a palette could be substituted
  3487. ø¿°dONLNdSq })œ. 
  3488. ø¿°dONLNdUq}ã)For instance,  setting up a†ó°ñ°dONLNdq}<â´(•ZQstructure for a gradient palette and setting the gradient as an attribute instead†ó°ñ°dONLNd√â<ï¸* (of a color would be perfectly acceptable
  3489. 
  3490. ¿°dONLNdÎâ˝ïˇ)¡.†ó°ñ†ó°ñ
  3491. °dONLNd°<≠‘(…ZExample Attribute Structure:†ó°ñ†ó°ñ°d WORD21°ñ 
  3492. ◊~    Ø.2121°dONLNdˇˇ+U PatStruct := { 5, 2, 'Pattern' }†ó°ñ , New York
  3493. °dONLNdˇˇ(Ù~Attribute Number†ó"Ì    tÊÛÌ˘ÊˆÌ˘ÌˆÌÛʈ#˝°ñ °dONLNdˇˇ(Û: Descriptive °dONLNdˇˇ* String†ó"Ó2Ït‰Î!‰Î!ÎΉ#˝°ñ °dONLNdˇˇ(ÊPalette °dONLNdˇˇ* Number†ótÂÏÂÏÏÏÂ"˙Ú†ó°ñ†ó°ñ†ó°ñ
  3494. _
  3495. .ˇ°dONLNd<™(*ZPCurrently, the third element of an object structure, the PatStruct, is passed to†ó°ñ°dONLNd`<z* SetPattern()¿°dONLNdl{´)?B, the fourth element of an object structure, LineStruct, is passed†ó°ñ°dONLNdØ<&H(BZto ’İdONLNd≤H&w)     SetLine()%@°dONLNdªx&ñ)0?, and the fifth element of an object structure, ColorStruct, is†ó°ñ°dONLNd˚&<2k(NZ
  3496. passed to “°dONLNd&k2†)/
  3497. SetColor()¿°dONLNd&°2ó)66. There are override capabilities, so that you are not†ó°ñ°dONLNdF2<>ì(ZZJlimited to selecting attributes from a palette. See gSetPattern, gSetLine,†ó°ñ°dONLNdë><Jπ* gSetColor in Appendix G.†ó°ñ†ó°ñ†ó°ñ†ó°ñ°dONLNd™n<zv*0<Example of Attribute Structures within an Object Structure :†ó°ñ†ó°ñ°ddPro†Ç†åˇˇˇˇˇˇ
  3498. •ZÊ    1•À¥    ˇˇˇˇˇˇˇˇ8ˇˇˇˇˇˇ    1ß饫    ˇˇˇˇˇˇˇˇ8ˇˇˇˇˇˇ    1ßE¥ä    ˇˇˇˇˇˇˇˇ8°ñ °ddPro(°öˇÙ
  3499. ßZµ
  3500. .ˇA∏A∏°dONLNdˇˇ*nMyObject  :=   { global LineTool, { {100,50}, {50,100} },{15, 2, ‘Pattern’}, {6, 3, ‘Line’}, {24, 4, ‘Color}};†ó°ñ °ddPro(°öˇfi˛ï
  3501. ª¬À°dONLNdˇˇ(«≈ ColorStruct†ó°ñ °ddPro(°öˇ—˛¨
  3502. »´ÿ°dONLNdˇˇ(‘Æ
  3503. LineStruct†ó°ñ °ddPro(°öˇ√˛Õ
  3504. ÷äÊðdONLNdˇˇ(‚ç
  3505.  PatStruct†ó°d
  3506. dPro    †å
  3507. •ZÊq≤‡πÂ≤„πÂπ„π‡≤„"ª„˛†ç°ddPro
  3508. °d
  3509. dPro    †åq∏úø°∏üø°øüøú∏ü"œü†ç°ddPro
  3510. °d
  3511. dPro    †åq∏døi∏gøiøgød∏g"flg‡†ç°ddPro
  3512. "–ü"·g#†ç†É†ó°ñ†ó°ñ
  3513. _
  3514. .ˇ°dONLNdÁ”<flS(˚ZNote{İdONLNdΔTfl¢)H:  While an object structure can have defined Attribute Structures, if a†ó°ñ°dONLNd4fl<Î≠(ZStool's structure indicates that a particular attribute is not applicable (Attribute†ó°ñ°dONLNdàÎ<˜™* Tflag set to 0),  the attribute will not be set (see Attributes section for details).†ó°ñ†ó°ñ†ó°ñ†ó°ñ°dONLNd›<'j*0<Example of a Tool Structure with an Attribute flag set to 0 İdONLNdk'n(Câ:†ó°ñ†ó°ñ°ddPro†Ç°ñ °ddPro(°ö›
  3515. Rlaπ
  3516. .ˇGVGV°dONLNdˇˇ(]lglobal  SelectTool :=     °ddPro(°dONLNdˇˇ)l{ 1,   1°ddPro(ÿ°dONLNdˇˇ),°ddPro(’°dONLNdˇˇ)$    "Select",   kClick,    0,    {2,°ddPro(e°dONLNdˇˇ)z0°ddPro(@°dONLNdˇˇ)
  3517. ,1,1}  }; †ó°ñ °ddPro(°ö≈‰
  3518. iîô¬°dONLNdˇˇ(uóPatternFlag Attribute °ddPro(¢Ä)á
  3519. °ddPro(°dONLNdˇˇ(ÄóNSince the patternFlag is set to 0, a pattern will not be set when using this 
  3520. °ddPro(°dONLNdˇˇ* Etool, even if the Object  Structure has a defined Pattern Structure.
  3521. †ó
  3522. Rlô¬"pT°d
  3523. dPro    †åqbpiubsiuisipbs#˘†ç°ddPro
  3524. †É†óˇ ,◊#ˇ ˇˇˇˇ#◊°ñ 
  3525. _,Times
  3526. .ˇ°dONLNdˇˇ(⁄Z46°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)N5´(QlAttribute Number†ó°ñ†ó°ñ°dONLNdA<M≤(iZPThis is the number of the desired element within the specified palette ( see the†ó°ñ°dONLNdbM<YÑ* CTool Number section for details concerning the numbering of tools).†ó°ñ†ó°ñ†ó°ñ°dONLNd¶qN}û+$Palette Number†ó°ñ†ó°ñ°dONLNdµâ<ï´(±ZMThis is the number of the palette containing the desired element. This should†ó°ñ°dONLNdï<°†* Lcorrespond to the order in which the palette structure appears in the global†ó°ñ°dONLNdP°<≠ì* IgPaletteList. ( see the Palette Number section for details concerning the†ó°ñ°dONLNdö≠<π®* numbering of palettes)†ó°ñ†ó°ñ°dONLNd±≈N—™+Descriptive String†ó°ñ†ó°ñ°dONLNdƒ›<È≥(ZOThe descriptive string is merely a way of reporting information that represents†ó°ñ°dONLNdÈ<ıì* what has occurred
  3527. »°dONLNd%Èìıò)W. 
  3528. »°dONLNd'Èòıú)8Stating that the fifth element of the second palette was†ó°ñ°dONLNd`ı<©(ZLselected does not adequately describe what took place,  however stating that†ó°ñ°dONLNd≠<
  3529. ·* $the fifth pattern was selected does.†ó°ñ†ó°ñ†ó°ñ°dONLNd“!<-]* Note:  y¿°dONLNdŸ!^-µ)"KSetting an attribute structure within an object structure to zero indicates†ó°ñ°dONLNd%-<9“(UZ#that the attribute is not to be set
  3530. u@°dONLNdH-”9ÿ)ó. 
  3531. u@°dONLNdJ-ÿ9≥)/Setting an attribute structure within an Object†ó°ñ°dONLNdz9<E°(aZKstructure to 'Random' indicates that a random Attribute structure should be†ó°ñ°dONLNdΔE<Qm*
  3532. generated.†ó°ñ†ó°ñ†ó°ñ°dONLNd—i<uÍ*$SExample of a Object Structure with an Attribute flags set to 'Random', and 0 (Zero)≤°dONLNd$iÍuÌ(ë:†ó°ñ†ó°ñ°d WORDJ\°ñ 
  3533. û~Ë⁄
  3534. .J\J\°dONLNdˇˇ(®~VMyObject :=   { Global LineTool,  { {100,50}, {50,100} },    'Random’,    0,    0   };†ó°ñ °dONLNdˇˇ+g -Set to 'Random', will select a random pattern†ó°ñ °dONLNdˇˇ+$2Set to 0 (Zero), will not select a line or a color†ó°ñ , New York°dONLNdˇˇ(º€
  3535. PatternFlag  †ó"π0Xt¨Ö≥ã¨à≥ã≥à≥Ö¨à#˙°ñ °dONLNdˇˇ++LineFlag and ColorFlag†ó"’ûtØ∞∂∂Ø≥∂∂∂≥∂∞Ø≥"‘≥‚0üß≠ †óˇ◊#ˇ ˇˇˇˇ#◊°ñ 
  3536. _,Times
  3537. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛47†ó°ñ,     Helvetica
  3538. °dONLNd/<>‰(YZUsing The Draw Libraries†ó°ñ
  3539. °dONLNd=<Iî* HIn the previous section the requirements for setting up the various Draw†ó°ñ°dONLNdcI<U÷*  Library structures were outlined
  3540. ¡°dONLNdÉI÷U€)ö. 
  3541. ¡°dONLNdÖI€UÅ)$In the following section the details†ó°ñ°dONLNd™U<ai(}Z>concerning actually using the Draw Libraries will be discussed
  3542. `°dONLNdËUjao(}à. 
  3543. `°dONLNdÍUoaü)The Draw†ó°ñ°dONLNdÛa<m®(âZMLibraries were designed to be as flexible as possible. They allow for several†ó°ñ°dONLNdAm<yñ* Imethods of automatically generating test cases, and a way that the script†ó°ñ°dONLNdãy<ÖË* %writer can specify tools and objects.†ó°ñ†ó°ñ°dONLNd±ìNüÿ+Calling the Draw Libraries†ó°ñ†ó°ñ°dONLNdô<∑~(”ZAAlong with the main routines that make up the Draw Libraries core†ó°ñ°dONLNd∑<√†* Lfunctionality, several high level routines have been developed to assist the†ó°ñ°dONLNd[√<œ˝* )script writer in using the Draw Libraries
  3544. æ°dONLNdÑ√˝œˇ)¡.†ó°ñ†ó°ñ,    Monaco°dONLNdá€<ËT(Znada°dONLNdç€ÑËÆ)HDoDrawÅİdONLNdì€ÆËí)*&( pTestMethod, pSpecifier, pNumTimes )†ó°ñ†ó°ñ
  3545. °dONLNdªÚ`˛Ø(~GDoDraw() is a highlevel task that calls the appropriate low-level tasks†ó°ñ°dONLNd˛`
  3546. y* 9necessary to generate random objects based on the defined†ó°ñ°dONLNd=
  3547. `Ï* paletteStructs and toolStructs
  3548.  °dONLNd[
  3549. ÌÚ)ç. 
  3550.  °dONLNd]
  3551. Ú∞)(If the global gDrawMethod is set it will†ó°ñ°dONLNdÜ`"ñ(>~@override any parameter passed to DoDraw. All of our scripts call†ó°ñ°dONLNd«"`.™* ADoDraw() with no parameters so we can define which test method to†ó°ñ°dONLNd    .`: * &use by setting the global gDrawMethod.†ó°ñ†ó°ñ
  3552. °dONLNd0F`Sò*Examples
  3553. ǰdONLNd8GòSõ)8:†ó°ñ
  3554.     °dONLNd:S`^®({~ • DoDraw(0);°dONLNdGSÃ^∞)l&# Does nothing - DoDraw is turned OFF †ó°ñ†ó°ñ°dONLNdpi`tÆ(ë~
  3555. • DoDraw(1); °dONLNd~iÃt»)l*# Random objects for all tools defined in †ó°ñ°dONLNd´t®¥(úΔ  °dONLNdÆtÃ8)$# global gToolList†ó°ñ†ó°ñ°dONLNd√ä`ï®(≤~ • DoDraw(2);°dONLNd–äÃï™)l%# Generates one totally random object†ó°ñ†ó°ñ†ó°ñ
  3556. °dONLNdˆ¨<πÑ(’Z objectStruct°dONLNd¨®πÓ)l
  3557. DrawObjectÇİdONLNd
  3558. ¨Óπä)F(objectStruct, specifier )†ó°ñ†ó°ñ
  3559. °dONLNd(ƒ`–i(Ï~6DrawObject() is the main routine in the Draw Libraries
  3560. ≥İdONLNd^ƒi–n(Ïá. 
  3561. ≥İdONLNd`ƒn–ô)
  3562. It takes a†ó°ñ°dONLNdk–`‹£(¯~Dcomplete ObjectStruct as a parameter and a specifier to indicate the†ó°ñ°dONLNd∞‹`ˢ* window or rectangle to draw in.†ó°ñ†ó°ñ
  3563. °dONLNd–Ù`ò*Example:†ó°ñ
  3564.     °dONLNdŸ` å* 2• DrawObject({global SelectTool, {{25,15}}, {12,2 †ó°ñ°dONLNd ®V+H ,'Pattern'}, 0, 'Random'},0);†ó°ñ†ó°ñ†ó°ñ
  3565. °dONLNd-.<;Ñ(WZ objectStruct°dONLNd:.®;ƒ)lDrawŰdONLNd>.ƒ;)2( pTheTool, pThePointList, pThePattern, pTheLine, †ó°ñ°dONLNdt:ÃGV+ pTheColor, pSpecifier )†ó°ñ†ó°ñ
  3566. °dONLNdåQ`]´(y~DDraw() takes six parameters, one for each element in an ObjectStruct†ó°ñ°dONLNd—]`ib* 5and one to specify the window or rectangle to draw in
  3567. °dONLNd]cih(ÖÅ. 
  3568. °dONLNd]hiï)
  3569. All of the†ó°ñ°dONLNdi`u£(ë~Bparameters default to 'Random', which means that elements that are†ó°ñ°dONLNdVu`Å$* (not specified will be generated randomly
  3570. ¿@°dONLNd~u$Å))ƒ. 
  3571. ¿@°dONLNdÄu)Åü)Passing a 0 (Zero) for an†ó°ñ°dONLNdöÅ`çY(©~6element indicates that the attribute should not be set
  3572. ¿Ä°dONLNd–ÅYç^)˘. 
  3573. ¿Ä°dONLNd“Å^ç¶)The purpose of†ó°ñ°dONLNd·ç`ô•(µ~Hthis task is to allow a script writer to pass in only the elements of an†óˇ◊#ˇ ˇˇˇˇ#◊°ñ 
  3574. _,Times
  3575. .ˇ°dONLNdˇˇ(⁄Z48°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)`5ˆ(Q~ object that they want to specify
  3576. «@°dONLNd )ˆ5˚)ñ. 
  3577. «@°dONLNd")˚5ù) Draw will call DrawObject with a†ó°ñ°dONLNdC5`Aö(]~>complete ObjectStruct (even though many of its elements may be†ó°ñ°dONLNdÇA`M∫* equal to 'Random')
  3578. À¿°dONLNdîA∫Mø)Z. 
  3579. À¿°dONLNdñAøM∞)4If a particular element is desired only that element†ó°ñ°dONLNdÀM`Y»(u~needs to be passed in.†ó°ñ†ó°ñ,    Monaco
  3580. °dONLNd„e`rò*Examples
  3581. ǰdONLNdÎfòrõ)8:†ó°ñ
  3582.     °dONLNdÌr`}¬(ö~; • Draw(Global SelectTool, 'Random',0,0,{14,3, 'Color'},0);†ó°ñ†ó°ñ
  3583. °dONLNd)à`î™*GThe SelectTool is specified so it will be used, a random Pointlist will†ó°ñ°dONLNdqî`†Ø* Hbe generated, no Pattern or Line will be set, and the 14th color will be†ó°ñ°dONLNd∫†`¨8* /selected (if the SelectTool allows for colors).†ó°ñ†ó°ñ
  3584.     °dONLNdÍ∏`√*• Draw(, , , ,{14,3, 'Color'});†ó°ñ†ó°ñ
  3585. °dONLNd
  3586. Œ`⁄⁄*OAll elements in the above struct would be random except for the color attribute
  3587. YİdONLNdYŒ€⁄›(ˆ˘.†ó°ñ
  3588. °dONLNd\⁄`Êw(~Note{İdONLNd`⁄xÊ‚)P: If the random tool that is generated doesn't support the color attribute, this†ó°ñ°dONLNd±ÊiÚË(ácolor struct will not be set.†ó°ñ†ó°ñ
  3589.     °dONLNdœ˛`    ñ(&~    • Draw();†ó°ñ†ó°ñ
  3590. °dONLNd⁄i L+    /All elements in the above struct will be random
  3591. lİdONLNd    M O)‰.†ó°ñ†ó°ñ†ó°ñ°dONLNd 8<EÑ(aZ objectStruct°dONLNd8®E
  3592. )lGenerateObjectÉİdONLNd'8
  3593. E^)b( pTheObject )†ó°ñ†ó°ñ
  3594. °dONLNd8O`[H(w~.GenerateObject() generates random objectStruct
  3595. ≤°dONLNdfOH[M)Ë. 
  3596. ≤°dONLNdhOM[ï)It is possible to†ó°ñ°dONLNdz[`gµ(É~Cspecify elements and have GenerateObject() generate random elements†ó°ñ°dONLNdæg`s¯*  for those specified as 'Random'.†ó°ñ†ó°ñ
  3597. °dONLNdfl`åò*Examples
  3598. ǰdONLNdÁÄòåõ)8:†ó°ñ°dONLNdÈå[ò^(¥y 
  3599.     °dONLNdÍå^ó≤)• MyObject := 
  3600. °dONLNd¯å≤ò˝)TGenerateObject
  3601.     «@°dONLNdå˝ó)K();†ó°ñ†ó°ñ°dONLNd £[ÆØ(Ày• MyObject := 
  3602. °dONLNd£ØØ˙)TGenerateObject
  3603.     «@°dONLNd(£˙Æ*)K({Global†ó°ñ°dONLNd1Ød∫6(◊Ç#SelectTool,'Random',0,'Random',0});†ó°ñ†ó°ñ†ó°ñ
  3604. °dONLNdU–<›r(˘Z    patStruct°dONLNd_–Ñ› )H
  3605. SetPatternÇİdONLNdi– ›fi)F.( pThePattern, pSelectPattern, pObjectNumber )†ó°ñ†ó°ñ
  3606. °dONLNdôÁ`Ûó(~ASetPattern() will set patterns based on the pThePattern parameter
  3607. ZİdONLNd⁄ÁòÛù(∂. 
  3608. ZİdONLNd‹ÁùÛ§)If†ó°ñ°dONLNdflÛ`ˇó(~@pThePattern = 'Random'  a PatStruct will be generated before the†ó°ñ°dONLNd ˇ` ≈* pattern is actually set
  3609. @°dONLNd7ˇΔ À)f. 
  3610. @°dONLNd9ˇÀ ´)/If the pSelectPattern parameter = 0 (Zero) then†ó°ñ°dONLNdi `™(3~Ethe pattern will not actually be selected, however a random PatStruct†ó°ñ°dONLNdØ`#Ò* will be generated and returned
  3611. l°dONLNdÕÚ#Ù)í.†ó°ñ†ó°ñ°dONLNd–.`;ò(W~Examples
  3612. ǰdONLNdÿ/ò;õ)8:†ó°ñ
  3613.     °dONLNd⁄;`F(c~• SetPattern('Random'); °dONLNdÛ;F⁄)¥!# Select random pattern (default)†ó°ñ†ó°ñ°dONLNdQ`\∫(y~• SetPattern();°dONLNd)Q\n)¥# Same as above†ó°ñ†ó°ñ°dONLNd9g`r¿(è~• SetPattern(0);°dONLNdLgrÏ)¥$# Don't set any pattern ( no reason †ó°ñ°dONLNdur}n* # to make call)†ó°ñ†ó°ñ°dONLNdÖà`ì‘(∞~>• SetPattern({15,2, 'Pattern'}); # Passing an actual patStruct†ó°ñ†óˇ◊#ˇ ˇˇˇˇ#◊°ñ 
  3614. _,Times
  3615. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛49†ó°ñ,    Monaco
  3616. °dONLNd)<6x(RZ
  3617. LineStruct°dONLNd )Ñ6µ)HSetLineÅ¿°dONLNd)µ6•)1(( pTheLine, pSelectLine, pObjectNumber )†ó°ñ†ó°ñ
  3618. °dONLNd<@`Lx(h~:SetLine() will set line weights based on theLine parameter
  3619.  °dONLNdv@yL~(hó. 
  3620.  °dONLNdx@~LÖ)If†ó°ñ°dONLNd{L`X≤(t~FpTheLine = 'Random'  a LineStruct will be generated before the line is†ó°ñ°dONLNd¬X`dñ* actually set
  3621. Œ¿°dONLNdŒXñdõ)6. 
  3622. Œ¿°dONLNd–Xõd¨):If the gSelectLine parameter = 0 (Zero) then the line will†ó°ñ°dONLNd d`pâ(å~=not actually be selected, however a random LineStruct will be†ó°ñ°dONLNdIp`|£* Egenerated and returned.  This routine is the default way of selecting†ó°ñ°dONLNdè|`àv* =line weights from palettes.  In order for this to work a line†ó°ñ°dONLNdÕà`îç* ApaletteStruct needs to exist within the gPaletteList.  The global†ó°ñ°dONLNdî`†ö* @variable kLinePaletteNum should then be set to the integer which†ó°ñ°dONLNdP†`¨ü* Frepresents the order in which the paletteStruct (for the line palette)†ó°ñ°dONLNdó¨`∏Ì* exists within the gPaletteList.†ó°ñ†ó°ñ
  3623. °dONLNd∑ƒ`—ò*Examples
  3624. ǰdONLNdø≈ò—õ)8:†ó°ñ
  3625.     °dONLNd¡—`‹fi(˘~• SetLine('Random'); °dONLNd◊—‹Œ)ê%# Select random line weight (default)†ó°ñ†ó°ñ°dONLNd˝Á`Ú®(~ • SetLine();°dONLNd ÁÚJ)ê# Same as above†ó°ñ†ó°ñ°dONLNd˝`Æ(%~
  3626. • SetLine(0);°dONLNd*˝Ï)ê*# Don't set any line Weight ( no reason   †ó°ñ°dONLNdXJ* # to make call)†ó°ñ†ó°ñ°dONLNdh`)∂(F~9• SetLine({12,3, 'Line'}); # Passing an actual LineStruct†ó°ñ†ó°ñ†ó°ñ
  3627. °dONLNd¢?<L~(hZ colorStruct°dONLNdÆ?ÑLº)HSetColorǰdONLNd∂?ºL∏)8*( pTheColor, pSelectColor, pObjectNumber )†ó°ñ†ó°ñ
  3628. °dONLNd‚V`bí(~~ASetColor() will set colors based on its parameter, pTheColor.  If†ó°ñ°dONLNd$b`nö* @pTheColor = 'Random'  a colorStruct will be generated before the†ó°ñ°dONLNden`zº* color is actually set
  3629. v@°dONLNdznΩz¬)]. 
  3630. v@°dONLNd|n¬z≠)1If the pSelectColor parameter = 0 (Zero) then the†ó°ñ°dONLNdÆz`ÜÆ(¢~Fcolor will not actually be selected, however a random colorStruct will†ó°ñ°dONLNdıÜ`í‹* be generated and returned
  3631. ¡¿°dONLNdÜ‹í·)|. 
  3632. ¡¿°dONLNdÜ·í≠),This routine is the default way of selecting†ó°ñ°dONLNd=í`û¡(∫~Colors from palettes
  3633. w@°dONLNdQí¬û«)b. 
  3634. w@°dONLNdSí«ûû)/In order for this to work a color paletteStruct†ó°ñ°dONLNdÉû`™(Δ~&needs to exist within the gPaletteList
  3635. t¿°dONLNd©û™)±. 
  3636. t¿°dONLNd´û™s)The global variable†ó°ñ°dONLNdø™`∂©(“~CkColorPaletteNum should then be set to the integer which represents†ó°ñ°dONLNd∂`¬µ* Kthe order in which the paletteStruct (for the color  palette) exists within†ó°ñ°dONLNdO¬`Œ≠* the gPaletteList.†ó°ñ†ó°ñ
  3637. °dONLNda⁄`Áò*Examples
  3638. ǰdONLNdi€òÁõ)8:†ó°ñ
  3639.     °dONLNdkÁ`Ú‰(~• SetColor('Random'); °dONLNdÇÁÚ™)ê# Select random Color (default)†ó°ñ†ó°ñ°dONLNd¢˝`Æ(%~
  3640. • SetColor();°dONLNd±˝J)ê# Same as above†ó°ñ†ó°ñ°dONLNd¡`¥(;~• SetColor(0);°dONLNd—»)ê$# Don't set any Color ( no reason to†ó°ñ°dONLNd¸)8* # make call)†ó°ñ†ó°ñ°dONLNd    4`?»(\~<• SetColor({15,4, 'Color'}); # Passing an actual colorStruct†ó°ñ†ó°ñ†óˇ<◊#ˇ ˇˇˇˇ#◊°ñ 
  3641. _,Times
  3642. .ˇ°dONLNdˇˇ(⁄Z50°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ,    Monaco
  3643. °dONLNd)<6x(RZ
  3644. toolStruct°dONLNd )Ñ6µ)HSetToolÅ¿°dONLNd)µ6ì)1%( pTool, pSelectTool, pObjectNumber )†ó°ñ†ó°ñ
  3645. °dONLNd9@`L#(h~)SetTool() will set tools based on theTool
  3646.     s¿°dONLNdb@$K*)ƒ 
  3647. s¿°dONLNdc@*LY)    parameter
  3648. i@°dONLNdl@ZL_)0. 
  3649. i@°dONLNdn@_LÜ)If pTool
  3650.     ¿°dONLNdv@áKç)( 
  3651. ¿°dONLNdw@çLì)=†ó°ñ°dONLNdyL`X≠(t~H'Random'  a toolStruct will be generated before the tool is actually set
  3652. İdONLNd¡LÆX∞(tÃ.†ó°ñ
  3653. °dONLNd√X`d≠(Ä~GIf the pSelectTool parameter = 0 (Zero) then the tool will not actually†ó°ñ°dONLNd d`pê* >be selected, however a random toolStruct will be generated and†ó°ñ°dONLNdJp`|á* returned
  3654. y°dONLNdRpà|ç)(. 
  3655. y°dONLNdTpç|í)7This routine is the default way of selecting Tools from†ó°ñ°dONLNdå|`àÑ(§~palettes
  3656. %¿°dONLNdî|Öàä)%. 
  3657. %¿°dONLNdñ|äàü)=In order for this to work a tool paletteStruct needs to exist†ó°ñ°dONLNd‘à`îÃ(∞~within the gPaletteList
  3658. $@°dONLNdÎàÕî“)m. 
  3659. $@°dONLNdÌà“îØ)+The global variable kColorPaletteNum should†ó°ñ°dONLNdî`†ï(º~Bthen be set to the integer which represents the order in which the†ó°ñ°dONLNd\†`¨ê* DpaletteStruct (for the tool  palette) exists within the gPaletteList
  3660. c¿°dONLNd††ë¨ñ(»Ø. 
  3661. c¿°dONLNd¢†ñ¨®)The†ó°ñ°dONLNd¶¨`∏°(‘~Fglobal variable gToolList should be set to all of the available tools.†ó°ñ†ó°ñ
  3662. °dONLNd̃`—ò*Examples
  3663. ǰdONLNdı≈ò—õ)8:†ó°ñ
  3664.     °dONLNd˜—`‹fi(˘~• SetTool('Random'); °dONLNd
  3665. —‹§)ê# Select random Tool (default)†ó°ñ†ó°ñ°dONLNd,Á`Ú®(~ • SetTool();°dONLNd:ÁÚJ)ê# Same as above†ó°ñ†ó°ñ°dONLNdJ˝`Æ(%~
  3666. • SetTool(0);°dONLNdY˝Ê)ê)# Don't set any Tool ( no reason to make †ó°ñ°dONLNdá* # call)†ó°ñ†ó°ñ°dONLNdè`)º(F~:• SetTool({4,1, 'Circle'}); # Passing an actual toolStruct†ó°ñ†ó°ñ†ó°ñ
  3667. °dONLNd ?<LT(hZnada°dONLNdœ?mL»)1
  3668. PalettePickerÉ@°dONLNd‹?»L|)[( pElemStruct, pObjectNumber )†ó°ñ†ó°ñ
  3669. °dONLNd¸V`b§(~~HPalettePicker() is a high level task that calls the appropriate tasks to†ó°ñ°dONLNdEb`n&* +actually select tools from various palettes
  3670. j¿°dONLNdpb'n,)«. 
  3671. j¿°dONLNdrb,n∞)The parameter pElemStruct†ó°ñ°dONLNdån`zØ(ñ~@has three required elements  {ElemNum, PalNum, ElemName}.  If an†ó°ñ°dONLNdÕz`Ü¥* FelemStruct is passed in which contains more than these three elements,†ó°ñ°dONLNdÜ`íô* Call others will be ignored. Normally, scriptors will not make calls†ó°ñ°dONLNdXí`û€* directly to PalettePicker()
  3672. ≈°dONLNdsí€û‡){. 
  3673. ≈°dONLNduí‡û¥)/PalettePicker is called by all of the selection†ó°ñ°dONLNd•û`™´(Δ~Dsubroutines e.g. SetColor, SetPattern, SetLine, SetTool, DrawObject,†ó°ñ°dONLNdÍ™`∂p* etc.†ó°ñ†ó°ñ
  3674. °dONLNd¬`œò*Examples
  3675. ǰdONLNd¯√òœõ)8:†ó°ñ
  3676.     °dONLNd˙œd⁄*(˜Ç!• PalettePicker(global LineTool);†ó°ñ†ó°ñ°dONLNdÂmœ+    ;# Selects the LineTool (if defined) Same as  SetTool(global†ó°ñ°dONLNdYv˚≤+    
  3677. LineTool);†ó°ñ†ó°ñ°dONLNddd$(.Ç • PalettePicker({2,1,”Select”});†ó°ñ†ó°ñ°dONLNdÖm'±+    6# Selects the second tool, from the 1st palette, named†ó°ñ°dONLNdº'v2¿+     7'Select'. Assuming the 1st palette is set up correctly.†óˇ&◊#ˇ ˇˇˇˇ#◊°ñ 
  3678. _,Times
  3679. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛51†ó°ñ,     Helvetica
  3680. °dONLNd6<H·(cZTest Case Tracking TXT
  3681.  gXg
  3682. †ó°ñ†ó°ñ
  3683. °dONLNdV<eu*Overview†ó°ñ
  3684. °dONLNde<qÍ* XSPEC S&L contains a collection of several tasks which support defining and tracking test†ó°ñ°dONLNduq<}Ç* case execution
  3685.  ¿°dONLNdÉqÇ}á)F. 
  3686.  ¿°dONLNdÖqá}›)GThis section describes the routines which support defining and tracking†ó°ñ°dONLNdÕ}<âk(•Z test cases.†ó°ñ†ó°ñ°dONLNd⁄ï<°o*AIn order to track test cases (TCS) we had to define several terms
  3687. W°dONLNdïp°u(Ωé. 
  3688. W°dONLNdïu°‡)A TCS  is the smallest†ó°ñ°dONLNd4°<≠ñ(…ZJamount of functionality that a script writer may be interested in tracking
  3689. ≤°dONLNd~°ñ≠õ(…¥. 
  3690. ≤°dONLNdİõ≠Â)For example, A†ó°ñ°dONLNdè≠<πfi(’ZRTCS could be defined as "Saving a Document". While there are many steps  you would†ó°ñ°dONLNd‚π<≈È* Whave to go through to save a document, you may not be interested in tracking every menu†ó°ñ°dONLNd:≈<—•* selection or keystroke
  3691. …İdONLNdP≈•—ß)i.†ó°ñ†ó°ñ
  3692. °dONLNdS›<È€(ZZThe term suite is used to specify all of the test cases that were executed at a given time
  3693. Q°dONLNd≠›‹Èfi(˙.†ó°ñ
  3694. °dONLNdØÈ<ı‰(ZTTherefore, each of the SPEC S&L Standard QuickLook scripts can be considered a suite
  3695. ˛Ä°dONLNdȉıÊ(.†ó°ñ
  3696. °dONLNdı<Ÿ(Z[The test cases that are executed as part of a suite do not have to be directly related, for†ó°ñ°dONLNda<
  3697. √* Mexample the Standard QuickLooks execute numerous Standard File test cases and†ó°ñ°dONLNdØ
  3698. <Ë* "numerous window related test cases
  3699. °dONLNd—
  3700. ÈÓ)≠. 
  3701. °dONLNd”
  3702. ÓÊ)5These groups of test cases are not related except for†ó°ñ°dONLNd    <%∞(AZQthe fact that the applications the scripts were written for support both types of†ó°ñ°dONLNd[%<1|* functionality.†ó°ñ†ó°ñ
  3703. °dONLNdj=<L *How Test Case Tracking Works†ó°ñ
  3704. °dONLNdáK<W´* QAll scripts must explictly make a call to indicate that a Suite is being started,†ó°ñ°dONLNdŸW<cT* >this is done with a call to SuiteStart (see below for details)
  3705. ª¿°dONLNdWTcY(r. 
  3706. ª¿°dONLNdWYc¢)By making this†ó°ñ°dONLNd(c<o†(ãZNcall SuiteStart will store a number of variables about the state of the target†ó°ñ°dONLNdwo<{¢* Kmachine so that an individual test case can be reproduced if necessary. For†ó°ñ°dONLNd√{<á≠* Mexample, all of the software configuarable variables (VM, FileShare settings,†ó°ñ°dONLNdá<ì1* 5etc.) will be outputted (see below for more details).†ó°ñ†ó°ñ°dONLNdGü<´≤*IIn order to track TCSs we have developed a mechanism by which you bracket†ó°ñ°dONLNdë´<∑h* >your functionality tests with calls to TCSStart() and TCSEnd()
  3707. °dONLNdœ´i∑n(”á. 
  3708. °dONLNd—´n∑¢)
  3709. TCSStart()†ó°ñ°dONLNd‹∑<√ú(flZIbasically tells us what you are planning to do, and TCSEnd() tells us how†ó°ñ°dONLNd&√<œØ* successful your test was
  3710. °dONLNd>√∞œµ)t. 
  3711. °dONLNd@√µœ´)7It is important to understand that the script writer is†ó°ñ°dONLNdxœ<€¢(˜ZIresponsible for determining how successfully the test completed. For more†ó°ñ°dONLNd¬€<Á≠* Jinformation about the different parameters used in TCSStart() and TCSEnd()†ó°ñ°dONLNd
  3712. Á<Û©* Nsee the headers inside the TCS.Lib. Appendix H contains a list of all the test†ó°ñ°dONLNd\Û<ˇû* cases in SPEC S&L.†ó°ñ†ó°ñ°dONLNdo <a*<A typical TCSSTart() call contains the following parameters:†ó°ñ°dONLNd≠<#¶* (pTCSID, pTextDesc)†ó°ñ†ó°ñ°dONLNd√*<6I*7pTCSID is a list formed with the following information:†ó°ñ†ó°ñ°dONLNd¸=ÑI‰+H- Test Case Number†ó°ñ°dONLNd    IÑU“* - Test Case Set*†ó°ñ°dONLNd    "UÑa^* -- Test Case Type *(defaults to Compatibility)†ó°ñ°dONLNd    QaÑm(* - Owner. *(defaults to SPECS&L)†ó°ñ†ó°ñ°dONLNd    qt<Äû(úZH* If these defaults values do not meet your needs, you may pass your own†ó°ñ°dONLNd    ∫ÄEåØ+     Kvalues by reasigning the following constants in your script: kTCSetDefault,†ó°ñ°dONLNd
  3713. åEò˘*  kTCTypeDefault, kTCOwnerDefault.†óˇ∞◊#ˇ ˇˇˇˇ#◊°ñ 
  3714. _,Times
  3715. .ˇ°dONLNdˇˇ(⁄Z52°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ†ó°ñ°dONLNd5<AZ(]Z:A typical TCSEnd() call contains the following parameters:†ó°ñ°dONLNd;A<M¢* H(pTCSID, pResultCode) There are several optional parameters available to†ó°ñ°dONLNdÑM<Y≠* Mprovide additional imformation about the completion of the test case. See the†ó°ñ°dONLNd“Y<eÍ* "header of TCSEnd() in the TCS.Lib.†ó°ñ†ó°ñ†ó°ñ°dONLNdı}<â◊*$Sample code for TCS tracking†ó°ñ,    Monaco
  3716.     °dONLNdâ`îΔ+$ Task TypeLetter()†ó°ñ°dONLNd$î`ü~* begin†ó°ñ°dONLNd+üÑ™D+$  # Push your TCS on our TCS Stack†ó°ñ°dONLNdM™Ñµ⁄* 9TCSStart({1,"MySet", "MyType", "MyGroup"}, "TypeLetter", †ó°ñ°dONLNdäµÃ¿ +H "TeachTeach");†ó°ñ†ó°ñ°dONLNdüÀÑ÷∞(Û¢2# Do whatever actions that are a part of your  TCS†ó°ñ°dONLNd”÷Ñ·z* )myReturnVal := LaunchTwitch("TeachText");†ó°ñ°dONLNd˛·ÑÏfi* if(myReturnVal)†ó°ñ°dONLNdÏ®˜J+$ myReturnVal := EnterText();†ó°ñ†ó°ñ°dONLNd/Ñ
  3717. ⁄(*¢9# Pop you TCS off and log it with the proper return value†ó°ñ°dONLNdj
  3718. Ñ»* 6TCSEnd({1,"MySet", "MyType", "MyGroup"}, myReturnVal);†ó°ñ°dONLNd°`#x(@~end;†ó°ñ†óˇD◊#ˇ ˇˇˇˇ#◊°ñ 
  3719. _,Times
  3720. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛53†ó°ñ°dONLNd)<5ä(QZ
  3721. The TCS Stack†ó°ñ°dONLNd5<Aˆ* &A stack is used to handle TCS tracking
  3722. s°dONLNd45˜A¸)ª. 
  3723. s°dONLNd65¸Aâ)A balanced stack is critical to†ó°ñ°dONLNdVA<MÀ(iZmaintaining valid TCS results
  3724. $İdONLNdsAÃM—)ê. 
  3725. $İdONLNduA—Mñ)+In order to maintain a balanced stack it is†ó°ñ°dONLNd°M<Y∞(uZPimportant that every call to TCSStart() is offset with one, and only one call to†ó°ñ°dONLNdÚY<em* TCSEnd()
  3726. “@°dONLNd˙Ymer)1. 
  3727. “@°dONLNd¸Yreû)>So when writing new TCSs be especially careful that all of the†ó°ñ°dONLNd;e<qa(çZ;branches within tasks will end up calling TCSEnd only once.†ó°ñ†ó°ñ°dONLNdw}<âD*3Example of a task that creates  an unbalanced stack†ó°ñ°dONLNd´â<ï©* MWhile the example below looks fairly similar to the first example there is an†ó°ñ°dONLNd˘ï<°ô* Iimportant difference. Upon entering the task a call to TCSStart() is made
  3728. Z¿°dONLNdBïö°ü(Ω∏. 
  3729. Z¿°dONLNdDïü°¶)If†ó°ñ°dONLNdG°<≠Ä(…ZCthe call to LaunchTwitch() is successful a call to TCSEnd() is made
  3730. ^°dONLNdä°Å≠Ü(…ü. 
  3731. ^°dONLNdå°Ü≠≥)
  3732. But if the†ó°ñ°dONLNdó≠<π¶(’ZKcall to LaunchTwitch is unsuccessful no call to TCSEnd() is made, this will†ó°ñ°dONLNd„π<≈Z* =create an unbalanced stack and possibly report false results.†ó°ñ†ó°ñ,    Monaco
  3733.     °dONLNd!—`‹Δ+$Task TypeLetter()†ó°ñ°dONLNd3‹`Á~* begin†ó°ñ°dONLNd:ÁÑÚD+$  # Push your TCS on our TCS Stack†ó°ñ°dONLNd\ÚÑ˝⁄* 9TCSStart({1,"MySet", "MyType", "MyGroup"}, "TypeLetter", †ó°ñ°dONLNdô˝Ã +H "TeachTeach");†ó°ñ†ó°ñ°dONLNdÆÑ∞(;¢2# Do whatever actions that are a part of your  TCS†ó°ñ°dONLNd‚Ñ)z* )myReturnVal := LaunchTwitch("TeachText");†ó°ñ°dONLNd
  3734. )Ñ4fi* if(myReturnVal)†ó°ñ°dONLNd4Ñ?¢* begin†ó°ñ°dONLNd&?®JJ+$ myReturnVal := EnterText();†ó°ñ°dONLNdDJ®U˛* 9# Pop you TCS off and log it with the proper return value†ó°ñ°dONLNdÄU®`Ï* 6TCSEnd({1,"MySet", "MyType", "MyGroup"}, myReturnVal);†ó°ñ°dONLNd∏`Ñkú(à¢end;†ó°ñ°dONLNdΩk`vx(ì~end;†ó°ñ†ó°ñ†ó°ñ†ó°ñ,     Helvetica
  3735. °dONLNd¬ö<©7(ƒZ$Calling The Test Case Tracking Tasks†ó°ñ†ó°ñ
  3736. °dONLNdÁ¥<¡T*nada°dONLNdÏ¥m¡≥)1
  3737. SuiteStartÇİdONLNdˆ¥≥¡Ÿ)F1( pScriptName, pScriptParamList, pScriptVersion )†ó°ñ†ó°ñ
  3738. °dONLNd)À`◊Í(Û~WSuiteStart() is the first task that is called when running a script which contains test†ó°ñ°dONLNdÅ◊`„Ë* cases that need to be tracked
  3739. l¿°dONLNdû◊È„Ó)â. 
  3740. l¿°dONLNd†◊Ó„‘)2Calling this task will output many of the target's†ó°ñ°dONLNd”„`Ô—( ~configuration variables.†ó°ñ†ó°ñ
  3741. °dONLNdÏ˚`ò*Examples
  3742. ǰdONLNdÙ¸òõ)8:†ó°ñ
  3743.     °dONLNdˆ`(0~• SuiteStart("MyScript.vu");†ó°ñ†ó°ñ°dONLNdm)…+
  3744. :# Indicates that the suite "MyScript.vu" is starting, will†ó°ñ°dONLNdN)v4¥+     5save off many of the targets configuration variables.†ó°ñ†ó°ñ†óˇ◊#ˇ ˇˇˇˇ#◊°ñ 
  3745. _,Times
  3746. .ˇ°dONLNdˇˇ(⁄Z54°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ,    Monaco
  3747. °dONLNd)<6f(RZinteger°dONLNd)m6•)1SuiteEndǰdONLNd)•6)8( pCompletionCode )†ó°ñ†ó°ñ
  3748. °dONLNd%A`M·(i~RWhen a suite that was started with SuiteStart() (see above) is completed a call to†ó°ñ°dONLNdxM`Y‰* PSuiteEnd() will output the amount ot time the suite took and the completion code†ó°ñ°dONLNd…Y`eó* Bfor the script. There are four completion codes currently defined.†ó°ñ°dONLNd eÑq‚+$ Completion Codes†ó°ñ°dONLNdq®}I+$ ! 1 := Suite Complete successfully†ó°ñ°dONLNdA}®ât* , 0 := Suite failed to complete successfully.†ó°ñ°dONLNdoâ®ïS* %-1 := Suite was not available to run.†ó°ñ°dONLNdñï®°Ë* D-2 := Target was lost during execution (possible crash) (see global †ó°ñ°dONLNd‹°Ã≠c+$ gLaunchReqs for more details).†ó°ñ†ó°ñ
  3749. °dONLNd˚π`Δò(‚~Examples
  3750. ǰdONLNd∫òΔõ)8:†ó°ñ
  3751.     °dONLNdΔ`—Δ(Ó~• SuiteStart(0); °dONLNdΔ×§)l$# Indicates that the suite failed to†ó°ñ°dONLNd?—Ë\* # complete successfully.†ó°ñ†ó°ñ†ó°ñ
  3752. °dONLNdXÙ<T(Znada°dONLNd]Ùm•)1TCSStartǰdONLNdeÙ•_)8( pTCSID, pTextDesc, pAppName )†ó°ñ†ó°ñ†ó°ñ
  3753. °dONLNdÜ`#≈(?~L In order to track  specific test case using the SPEC S&L test case tracking†ó°ñ°dONLNd”#`/Ë* Pmechanism, TCSStart should be called immediately prior to any actions that are a†ó°ñ°dONLNd$/`;Â* part of the functionality test
  3754. »Ä°dONLNdB/Â;Í)Ö. 
  3755. »Ä°dONLNdD/Í;Í)0A unique TCS number must be assigned to each TCS†ó°ñ°dONLNdu;`Gfl(c~Nthat is being tracked, currently the SPEC team has a numbering scheme that can†ó°ñ°dONLNdƒG`S˜* be made available upon request
  3756. ƒ°dONLNd‚G˜S¸)ó. 
  3757. ƒ°dONLNd‰G¸S⁄)+The pTextDesc parameter is provided to make†ó°ñ°dONLNdS`_·({~Othe output readable without requiring a database table to index the pTCSID. The†ó°ñ°dONLNd`_`kí* @pTextDesc should be set to a short string that describes the TCS
  3758. hİdONLNd†_ìkò(á±. 
  3759. hİdONLNd¢_òk‰) The pAppName†ó°ñ°dONLNdØk`w‹(ì~Rshould be passed in only if it is different than the global gAppTitle which is the†ó°ñ°dONLNdw`ÉÑ* default.†ó°ñ†ó°ñ
  3760. °dONLNd è`úò*Examples
  3761. ǰdONLNdêòúõ)8:†ó°ñ
  3762.     °dONLNdú`߬(ƒ~;• TCSStart({1,"MySet", "MyType", "MyGroup"}, "TypeLetter");†ó°ñ†ó°ñ°dONLNdQ≤mΩ±+
  3763. 6# Indicates that the TypeLetter TCS is about to begin.†ó°ñ†ó°ñ†ó°ñ
  3764. °dONLNdà’<‚T(˛Znada°dONLNdç’m‚ó)1TCSEndÅİdONLNdì’ó‚√)*2( pTCSID, pResultCode, pErrStr, pTCSVal, pTCSStr, †ó°ñ°dONLNd»·mÓµ(
  3765. ã pResultStr )†ó°ñ†ó°ñ
  3766. °dONLNd÷¯`È( ~R All calls to TCSStart() (see above) must be balanced with one (and only one) call†ó°ñ°dONLNd)`ù* to TCSEnd()
  3767. '¿°dONLNd4û£)>. 
  3768. '¿°dONLNd6£õ)4This is where success/failure is assigned to the TCS
  3769. ºÄ°dONLNdjõ†)¯. 
  3770. ºÄ°dONLNdl†Ë)It is possible to†ó°ñ°dONLNd~`x(8~<pass in a reason for failing, by using the pErrStr parameter
  3771. `°dONLNd∫y~(8ó. 
  3772. `°dONLNdº~’)The pTCSVal and†ó°ñ°dONLNdÃ`(¡(D~FpTCSStr parameters are currently reserved for internal use by SPEC S&L†ó°ñ°dONLNd(`4’* Drawing and Font tasks.†ó°ñ†ó°ñ
  3773. °dONLNd+@`Mò*Examples
  3774. ǰdONLNd3AòMõ)8:†ó°ñ
  3775.     °dONLNd5M`Xt(u~.• TCSEnd({1,"MySet", "MyType", "MyGroup"},1); °dONLNddMÄX(uû# Pass the top TCS on †ó°ñ°dONLNdÇXÄc»* # the stack.†ó°ñ†ó°ñ°dONLNdèn`y˛(ñ~E• TCSEnd({1,"MySet", "MyType", "MyGroup"},0, "There was no window to †ó°ñ°dONLNd÷y®Ñÿ+H close");†ó°ñ°dONLNdflÑmè€(¨ã=# Fail the top TCS on the stack, because "There was no window†ó°ñ°dONLNdèvö≤+    
  3776. to close".†óˇŒ◊#ˇ ˇˇˇˇ#◊°ñ 
  3777. _,Times
  3778. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛55†ó°ñ†óˇà◊#ˇ ˇˇˇˇ#◊°ñ 
  3779. _,Times
  3780. .ˇ°dONLNdˇˇ(⁄Z56°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ,     Helvetica
  3781. °dONLNd6<Hd(cZ!Appendix A - QuickLook Definition TXT
  3782.  gXg
  3783. †ó°ñ†ó°ñ
  3784. °dONLNd"\`h›+$!QA QuickLook is a basic test of a third party application's compatibility with our†ó°ñ°dONLNdth`t≠* system software
  3785. !İdONLNdÉhÆt≥)N. 
  3786. !İdONLNdÖh≥tŸ)?The following actions (not necessarily in the order tested) are†ó°ñ°dONLNd≈t`ÄŸ(ú~Nstandard in every QuickLook. For clarity, these actions are mapped to the high†ó°ñ°dONLNdÄ`åz* level “°dONLNdÄzå£)Do tasksz@°dONLNd"ħå[)*% available in the SPEC S&L Libraries.†ó°ñ†ó°ñ°ddPro†Çˇˇˇˇˇˇ
  3787. ∑Zí;    1D[í±    ˇˇˇˇˇˇˇˇ8ˇˇˇˇˇˇ    1˛[A≤    ˇˇˇˇˇˇˇˇ8ˇˇˇˇˇˇ    1ÜZ˚±    ˇˇˇˇˇˇˇˇ8°ñ °ddPro0°ö˛˙˛ë
  3788. ≤ΔÈ;.ˇ€·€·°dONLNdˇˇ(Ω…Quick Looks can also °ddPro0°dONLNdˇˇ*
  3789. include a test of basic °ddPro0°dONLNdˇˇ*
  3790. functionality specific to °ddPro0°dONLNdˇˇ*
  3791. the type of application.†óˇˇˇˇˇˇ
  3792. ∑Zí;    1∑ZH±    ˇˇˇˇˇˇˇˇ8°ñ °ddPro0°öˇÏˇˆ
  3793. ¿aE≠°dONLNdˇˇ(Àd,- Launch via Alias or Twitch to Application
  3794. °ddPro0°dONLNdˇˇ*
  3795. )- Dismiss opening dialog (if applicable)
  3796. °ddPro0°dONLNdˇˇ*
  3797. )- Close default window  (if applicable) 
  3798. °ddPro0°dONLNdˇˇ*
  3799. +- Choose menuitem to create a new document
  3800. °ddPro0°dONLNdˇˇ*
  3801. .- Dismiss new document dialog (if applicable)
  3802. °ddPro0°dONLNdˇˇ*
  3803. <- Copy text from custom Scrapbook and paste into a document
  3804. °ddPro0°dONLNdˇˇ*
  3805. A- Copy a graphic from custom Scrapbook and paste into a document
  3806. °ddPro0°dONLNdˇˇ*
  3807. &- Save document as existing - replace
  3808. °ddPro0°dONLNdˇˇ*
  3809. - Close document window
  3810. °ddPro0°dONLNdˇˇ*
  3811.  - Open previously saved document†ó°d
  3812. dPro    †å
  3813. ∑Zí;q˜…“¸“…¸…˜…¸“"¸±†ç°ddPro
  3814. °ñ °ddPro(°öˇµ˛|
  3815. ˆ€',    Monaco
  3816. °dONLNdˇˇ(fi
  3817. DoSetUpApp†óˇˇˇˇˇˇ
  3818. ∑Zí;    1JZf±    ˇˇˇˇˇˇˇˇ8°ñ °ddPro0°öˇYˇˆ
  3819. Sac‰
  3820. °dONLNdˇˇ(^d- Test fonts (if applicable)†óˇˇˇˇˇˇ
  3821. ∑Zí;    1hZѱ    ˇˇˇˇˇˇˇˇ8°ñ °ddPro0°öˇ;ˇˆ
  3822. qaÅ*°dONLNdˇˇ*!- Test draw tools (if applicable)†ó°ñ °ddPro0°öˇ ˇˆ
  3823. åaú:°dONLNdˇˇ**- Test basic functionality (if applicable)†ó°ÿˇˇÄ°÷ˇˇÄ†◊°¥
  3824. ∑Zí;"út†µ°÷ˇˇÄ†◊†Ÿ°÷ˇˇÄ°ÿˇˇÄ†æ†Ÿ†å"út"¢t"®t†ç°ÿˇˇÄ†ø†Ÿ†◊°ñ °ddPro0°ö˛˚ˇÔ
  3825. ±h¡s°dONLNdˇˇ+%/Database (Create new database, enter some data)†ó°ñ °ddPro0°ö˛⁄ˇÔ
  3826. “h‚û°dONLNdˇˇ*!<Spreadsheet (Enter some data and perform some calculations) †ó°ÿˇˇÄ°÷ˇˇÄ†◊°¥
  3827. ∑Zí;"¡t†µ°÷ˇˇÄ†◊†Ÿ°÷ˇˇÄ°ÿˇˇÄ†æ†Ÿ†å"¡t"«t"Õt†ç°ÿˇˇÄ†ø†Ÿ†◊°ÿˇˇÄ°÷ˇˇÄ†◊°¥"„t†µ°÷ˇˇÄ†◊†Ÿ°÷ˇˇÄ°ÿˇˇÄ†æ†Ÿ†å"„t"Èt"Ôt†ç°ÿˇˇÄ†ø†Ÿ†◊°ñ °ddPro0°ö˛©ˇı
  3828. b:®èİdONLNdˇˇ(e- Resize a document window
  3829. °ddPro0èİdONLNdˇˇ*
  3830. 1- Drag a document window to a different position
  3831. °ddPro0èİdONLNdˇˇ*
  3832. A- Scroll document window horizontally and vertically using thumb
  3833. °ddPro0èİdONLNdˇˇ*
  3834. 1- Zoom document window in and out (if applicable)†ó°ñ °ddPro0°ö˛aˇˆ
  3835. Kaè®°dONLNdˇˇ(Vd'- Save, modify, revert (if applicable)
  3836. °ddPro0°dONLNdˇˇ*
  3837. 9- Save As existing, cancel replace existing, save as new
  3838. °ddPro0°dONLNdˇˇ*
  3839. B- Choose About... Box,  dismiss dialog (disables VU in some apps)
  3840. °ddPro0°dONLNdˇˇ*
  3841. $- Choose Page Setup, dismiss dialog
  3842. °ddPro0°dONLNdˇˇ*
  3843. - Quit†ó°ñ °ddPro(°öˇZ˛{
  3844. Q‹a 
  3845. °dONLNdˇˇ(]flDoText†ó°ñ °ddPro(°öˇ=˛|
  3846. n€~ °dONLNdˇˇ(zfiDoDraw†ó°ñ °ddPro(°ö˛ë˛|
  3847. €*°dONLNdˇˇ*¨DoWindow†ó°ñ °ddPro(°ö˛I˛{
  3848. b‹r(°dONLNdˇˇ+H
  3849. DoCloseApp†ó°d
  3850. dPro    †å
  3851. ∑Zí;qR…[“W“[…W…R…W“"W±†ç°ddPro
  3852. °d
  3853. dPro    †åqp…y“u“y…u…p…u“"u±†ç°ddPro
  3854. °d
  3855. dPro    †åq¡º ≈Δ≈ ºΔº¡ºΔ≈"Δ± †ç°ddPro
  3856. °d
  3857. dPro    †åqd…m“i“m…i…d…i“"i±†ç°ddPro
  3858. °d
  3859. dPro    †åq…%“!“%…!……!“"!±†ç°ddPro
  3860. †É†ó°ñ†óˇ,◊#ˇ ˇˇˇˇ#◊°ñ 
  3861. _,Times
  3862. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛57†ó°ñ,     Helvetica
  3863. °dONLNd6<HQ(cZAppendix B - Sample QuickLook TXT
  3864.  gXg
  3865. †ó°ñ†ó°ñ,    Monaco
  3866.     °dONLNdV<aB*#†ó°ñ°dONLNd a<l* L****************************************************************************†ó°ñ°dONLNdml<wB* #†ó°ñ°dONLNdow<ÇB* #°dONLNdqwNÇä)
  3867. File Name:°dONLNd}w®Çˆ)Z
  3868. MacDrawPro.vu†ó°ñ°dONLNdãÇ<çB(™Z#†ó°ñ°dONLNdçç<òB* #°dONLNdèçNòÑ)    Contains:°dONLNdôçñòº)H1QuickLook test script for MacDraw Pro version 1.5†ó°ñ°dONLNdÀò<£B(¿Z#†ó°ñ°dONLNdÕ£<ÆB* #°dONLNdœ£NÆê) Written by:°dONLNd€£ñÆÚ)H:Kevin Avoy, Ken Landreth, Michael Leong, Gil Spencer et al†ó°ñ°dONLNdÆ<πB(÷Z#†ó°ñ°dONLNdπ<ƒB* #°dONLNdπNƒä)
  3869. Copyright:°dONLNd%πñƒŒ)H4© 1993 by Apple Computer, Inc., all rights reserved.†ó°ñ°dONLNdZƒ<œB(ÏZ#†ó°ñ°dONLNd\œ<⁄B* #†ó°ñ°dONLNd^⁄<Â* L****************************************************************************†ó°ñ°dONLNd´Â<B* #°dONLNdØÂr¥)6 C h a n g e°dONLNdºÂÃò)Z"H i s t o r y (most recent first):†ó°ñ°dONLNdfl<˚B(Z#†ó°ñ°dONLNd·˚<* L****************************************************************************†ó°ñ°dONLNd.<B* #†ó°ñ°dONLNd0<B* #°dONLNd3`x)$Vers°dONLNd8Ñ®)$  Date°dONLNd?∫fi)6Author°dONLNdF2)6 Description†ó°ñ°dONLNdR<'B(DZ#°dONLNdU`'x)$----°dONLNdZÑ'¥)$--------°dONLNdc∫'fi)6------°dONLNdj'¯)6,--------------------------------------------†ó°ñ°dONLNdó'<2B(OZ#°dONLNdö'`2x)$<1+>°dONLNdü'Ñ2¥)$ 5/25/93°dONLNd®'∫2Ã)6Bob°dONLNd≠'2í)6Adding header to  old files†ó°ñ°dONLNd…2<=B(ZZ#†ó°ñ°dONLNdÀ=<HB* #†ó°ñ°dONLNdÕH<S* L****************************************************************************†ó°ñ°dONLNdS<^B* #†ó°ñ†ó°ñ†ó°ñ†ó°ñ°dONLNd<äÏ*,H########################################################################†ó°ñ°dONLNdeä<ïB* #°dONLNdkäñï)ZExternal libraries†ó°ñ°dONLNdï<†Ï(ΩZH#=======================================================================†ó°ñ°dONLNd»†<´‡* FLibraries "Output.Lib", "DoTasks.Lib","Draw.Lib","DA.Lib", "Font.Lib",†ó°ñ°dONLNd´<∂>* +"Globals.Lib", "LaunchQuit.Lib", "TCS.Lib";†ó°ñ†ó°ñ†ó°ñ°dONLNd;Ã<◊Ú*!I#########################################################################†ó°ñ°dONLNdÖ◊<‚l* ########°dONLNdê◊ñ‚®)Z   °dONLNdî◊∫‚V)$Application Specific Tasks†ó°ñ°dONLNdØ‚<ÌÚ(
  3870. ZI#########################################################################†ó°ñ†ó°ñ°dONLNd˘¯<Ú*I#########################################################################†ó°ñ°dONLNdC<B* #°dONLNdIñˆ)ZInitAppGlobals()†ó°ñ°dONLNdZ<Ú(6ZI#========================================================================†ó°ñ°dONLNd§<$r*     # Author:°dONLNdØñ$¢)ZML†ó°ñ°dONLNd≤$</ê(LZ# Description:°dONLNd¡$ñ/»)Z3Sets up tools and fonts for MacDraw Pro.  This task†ó°ñ°dONLNdı/<:B(WZ#°dONLNd˙/Ñ:)Hmust be called first.†ó°ñ°dONLNd:<Eä(bZ
  3871. # Parameters:°dONLNd:ñEÆ)ZNone†ó°ñ°dONLNd#E<Px(mZ
  3872. # Returns:°dONLNd/EñP¿)ZNothing†ó°ñ°dONLNd7P<[~(xZ # Examples:°dONLNdDPñ[ˆ)ZInitAppGlobals()†ó°ñ°dONLNdU[<fÚ(ÉZI#========================================================================†ó°ñ°dONLNdüf<qx*
  3873. # History:†ó°ñ°dONLNd™q<|B* #†ó°ñ°dONLNd¨|<áÏ* H########################################################################†óˇ ◊#ˇ ˇˇˇˇ#◊°ñ 
  3874. _,Times
  3875. .ˇ°dONLNdˇˇ(⁄Z58°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ,    Monaco
  3876.     °dONLNd)<4∫(QZtask InitAppGlobals()†ó°ñ°dONLNd4<?Z* begin†ó°ñ†ó°ñ°dONLNdJNUz+2logstr("setting up {global gApptitle}'s globals");†ó°ñ°dONLNdVUN`»* ?global kClick, kDrag, kMultiDrag, kMultiClickDrag, kMultiClick;†ó°ñ°dONLNdó`Nk‘* Aglobal kPalDocWind, kPalWind, kPullOffPal, kPopUpPal, kScrollPal;†ó°ñ°dONLNd⁄kNvˆ* global kToolPaletteNum := 1;†ó°ñ°dONLNd˘vNŸ* global kColorPaletteNum := 2;†ó°ñ°dONLNdÅNå* global kPatternPaletteNum := 3;†ó°ñ°dONLNd9åNó*  global kGradientPaletteNum := 4;†ó°ñ†ó°ñ°dONLNd[¢N≠,*%global gWindowInset := {27,41,20,20};°dONLNdÅ¢8≠å)Í# Window inset†ó°ñ°dONLNdë≠N∏(’l"global gScreenInset := {0,20,0,0};°dONLNdµ≠8∏å)Í# Screen inset†ó°ñ°dONLNd≈∏N√ÿ(‡lglobal gVoidRect := {};°dONLNd‡∏√Ï)Δ$# Rect not to draw in - coordinates †ó°ñ°dONLNd√Œ¬* #  should be RelativeToWindow†ó°ñ°dONLNd/ŒNŸŒ(ˆl@global gLineWeights := {'1 point','2 point','6 point','8 point',†ó°ñ°dONLNdyŸfi‰&+ê '10 point'};†ó°ñ°dONLNdá‰NÔÆ( lglobal gTextStr;†ó°ñ†ó°ñ°dONLNdõ˙N“*global gPaletteList :=°dONLNd≤˙fi‰)ê{†ó°ñ°dONLNd∂`f(-~{°dONLNdæfiå)~#### Start Palette #1 - Tools†ó°ñ°dONLNdfi`“(8~{0, 21, 25, 228,0},°dONLNdÚfiÊ)~,# Location of palette relative to the window†ó°ñ°dONLNd(fi&‡* +# top is in first tool because it is larger†ó°ñ°dONLNdV&`1®(N~ kPalDocWind,°dONLNde&fi12)~# Palette type†ó°ñ°dONLNdv1`<ä(Y~{1,12},°dONLNdÇ1fi<)~1# Size of Tool matrix {numElemsWide,numElemsTall}†ó°ñ°dONLNd∂<`GÑ(d~{0,17}°dONLNd¡<fiGÜ)~# Offset between tools {h,v}†ó°ñ°dONLNd‡G`Rl(o~},°dONLNdÈGfiRP)~#### End Palette #1†ó°ñ°dONLNdˇR`]f(z~{°dONLNdRfi]í)~#### Start Palette #2 - Colors†ó°ñ°dONLNd(]`h™(Ö~7{152, 29, 148, 44,0},# PopPoint, TopLeft of first color†ó°ñ°dONLNdjhfis»+~ '#(if 4 item list - coords are absolute)†ó°ñ°dONLNdõsfi~
  3877. * 2#  (if 5 item list - coords are relativeToWindow )†ó°ñ°dONLNd–~`âú(¶~
  3878. kPopUpPal,°dONLNdfi~fiâ2)~# Palette type†ó°ñ°dONLNdÔâ`îä(±~{21,8},°dONLNd˚âfiî)~1# Size of Tool matrix {numElemsWide,numElemsTall}†ó°ñ°dONLNd/î`üä(º~{10,10}°dONLNd;îfiüÜ)~# Offset between tools {h,v}†ó°ñ°dONLNdZü`™l(«~},°dONLNdcüfi™P)~#### End Palette #2†ó°ñ°dONLNdy™`µf(“~{°dONLNd~™®µÆ)H#°dONLNdÇ™fiµí)6### Start Palette #3 - Pattern†ó°ñ°dONLNd£µ`¿º(›~:{175, 28, 176, 46,0},# PopPoint, TopLeft of first pattern †ó°ñ°dONLNd·¿`Àú*
  3879. kPopUpPal,°dONLNdÔ¿fiÀ2)~# Palette type†ó°ñ°dONLNdÀ`÷Ñ(Û~{8,8},°dONLNd Àfi÷)~1# Size of Tool matrix {numElemsWide,numElemsTall}†ó°ñ°dONLNd?÷`·ä(˛~{16,16}°dONLNdK÷fi·Ü)~# Offset between tools {h,v}†ó°ñ°dONLNdj·`Ïl(    ~},°dONLNds·fiÏP)~#### End Palette #3†ó°ñ°dONLNdâÏ`˜f(~{°dONLNdëÏfi˜û)~ #### Start Palette #4 - Gradient†ó°ñ°dONLNd¥˜`¬(~;{200, 28, 198, 47,0},# PopPoint, TopLeft of first gradient †ó°ñ°dONLNdÛ`
  3880. ú*
  3881. kPopUpPal,°dONLNdfi
  3882. 2)~# Palette type†ó°ñ°dONLNd
  3883. `Ñ(5~{8,2},°dONLNd
  3884. fi)~1# Size of Tool matrix {numElemsWide,numElemsTall}†ó°ñ°dONLNdQ`#ä(@~{16,16}°dONLNd]fi#Ü)~# Offset between tools {h,v}†ó°ñ°dONLNd|#`.f(K~}°dONLNdÑ#fi.>)~# End Palette #4†ó°ñ°dONLNdñ.N9Z(Vl};†óˇ®◊#ˇ ˇˇˇˇ#◊°ñ 
  3885. _,Times
  3886. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛59†ó°ñ,    Monaco
  3887.     °dONLNd)<4ˆ(QZ### MacDraw Pro tool Structures°dONLNd#)84¯)¸     {Flag, Pattern, Line, Color}†ó°ñ°dONLNdD4<?¿(\Z### Palette Elements:=°dONLNd[4Ã?Œ)ê+Tool#,Pal#,ToolName, ToolType, DblClktoEnd,†ó°ñ°dONLNdè?ÃJ*
  3888. SetAttributes†ó°ñ°dONLNdùJ<U¢(rZglobal SelectTool°dONLNdØJ®U∫)l:= °dONLNd≥JÃU8)${ 1,  1, "Select",°dONLNdΔJJUz)~kClick, °dONLNdœJÄUå)60,°dONLNd“JíU§){0}°dONLNd◊J»U‘)6};†ó°ñ°dONLNd⁄U<`ú(}Zglobal CharTool °dONLNdÎU®`∫)l:= °dONLNdÔUÃ`,)${ 2,  1, "Char",°dONLNdU8`b)lkDrag, °dONLNdUn`Ï)60, {gTextStr,0,0,1}};†ó°ñ°dONLNd`<kú(àZglobal LineTool °dONLNd/`®k∫)l:= °dONLNd3`Ãk,)${ 3,  1, "Line",°dONLNdD`8kb)lkDrag, °dONLNdL`nkz)60,°dONLNdO`Äk∂)    {1,0,1,0}°dONLNdY`»k‘)H};†ó°ñ°dONLNd\k<vú(ìZglobal RectTool °dONLNdmk®v∫)l:= °dONLNdqkÃvD)${ 4,  1,"Rectangle",°dONLNdÜkJvn)~kDrag,°dONLNdçkÄvå)60,°dONLNdêkív»)    {1,1,1,1}°dONLNdökÏv¯)Z};†ó°ñ°dONLNdùv<Å∫(ûZglobal RndRectTool:= °dONLNd≥vÃÅ>)ê{ 5,  1, "RndRect",°dONLNd«vJÅn)~kDrag,°dONLNdŒvÄÅå)60,°dONLNd—víÅ»)    {1,1,1,1}°dONLNd€vÏů)Z};†ó°ñ°dONLNdfiÅ<åú(©Zglobal OvalTool °dONLNdÔÅ®å∫)l:= °dONLNdÛÅÃå,)${ 6,  1, "Oval",°dONLNdÅ8åb)lkDrag, °dONLNd Ånåz)60,°dONLNdÅÄå∂)    {1,1,1,1}°dONLNdÅ»å‘)H};†ó°ñ°dONLNdå<óñ(¥Zglobal ArcTool °dONLNd,å®ó∫)l:= °dONLNd0åÃó&)${ 7,  1, "Arc",°dONLNd@å8ób)lkDrag, °dONLNdHånóz)60,°dONLNdKåÄó∂)    {2,1,1,1}°dONLNdUå»ó‘)H};†ó°ñ°dONLNdXó<¢ú(øZglobal FreeTool °dONLNdió®¢∫)l:= °dONLNdmóâD)${ 8,  1, "Freehand",°dONLNdÇóJ¢í)~ kMultiDrag, °dONLNdèó§¢∞)Z0,°dONLNdíó∂¢¯) {2,1,1,1}};†ó°ñ°dONLNdû¢<≠ú( Zglobal PolyTool °dONLNdØ¢®≠∫)l:= °dONLNd≥¢Ã≠>)${ 9,  1, "Polygon",°dONLNd«¢J≠í)~ kMultiClick,°dONLNd‘¢§≠∞)Z1,°dONLNd◊¢∂≠¯) {2,1,1,1}};†ó°ñ°dONLNd„≠<∏ñ(’Zglobal BezTool °dONLNdÛ≠®∏∫)l:= °dONLNd˜≠Ã∏>)${ 10, 1, "BezTool",°dONLNd ≠J∏í)~ kMultiClick,°dONLNd≠§∏∞)Z1,°dONLNd≠∂∏¯) {2,1,1,1}};†ó°ñ°dONLNd'∏<√ú(‡Zglobal NoteTool °dONLNd8∏®√∫)l:= °dONLNd<∏Ã√,)${ 11, 1, "Note",°dONLNdM∏8√b)lkDrag, °dONLNdU∏n√z)60,°dONLNdX∏Ä√º)
  3889. {gTextStr}°dONLNdc∏»√‘)H};†ó°ñ°dONLNdf√<ŒV(ÎZ/global ColorPickerTool:={ 12, 1, "ColorPicker",°dONLNdñ√\Œå(ÎzkClick, °dONLNdü√íŒû)60,°dONLNd¢√§Œ¬){0}};†ó°ñ°dONLNd®Œ<Ÿñ(ˆZglobal PenLine °dONLNd∏Œ®Ÿ∫)l:= °dONLNdºŒÃŸÄ)${ '', {87,29,1}, "PenLine",0, °dONLNd€ŒíŸû)Δ0,°dONLNdfiŒ§Ÿ¬){0}};†ó°ñ°dONLNd‰Ÿ<‰ñ(Zglobal ZoomOut °dONLNdÙŸ®‰∫)l:= °dONLNd¯ŸÃ‰z)${ '', {30,-8,2}, "ZoomOut",0,°dONLNdŸĉå)¥0,°dONLNdŸí‰∞){0}};†ó°ñ†ó°ñ°dONLNd ÔN˙∫(l# global Tool list†ó°ñ°dONLNd4˙N¿* global gToolList:={°dONLNdH˙Ã)~ SelectTool,†ó°ñ°dONLNd[®fi(-Δ    CharTool,†ó°ñ°dONLNdk®fi*     LineTool,†ó°ñ°dONLNd{®&fi*     RectTool,†ó°ñ°dONLNdã&®1* RndRectTool,†ó°ñ°dONLNdû1®<fi*     OvalTool,†ó°ñ°dONLNdÆ<®Gÿ* ArcTool,†ó°ñ°dONLNdΩG®Rfi*     FreeTool,†ó°ñ°dONLNdÕR®]fi*     PolyTool,†ó°ñ°dONLNd›]®hÿ* BezTool,†ó°ñ°dONLNdÏh®sfi*     NoteTool,†ó°ñ°dONLNd¸s®~* ColorPickerTool†ó°ñ°dONLNd~Ñâê(¶¢};†ó°ñ†ó°ñ°dONLNdîNü¸(ºl### font characteristic lists†ó°ñ°dONLNd3üN™⁄* Bglobal gFontSizeList := {'9','10','12','14','18', '24','36','48'};†ó°ñ°dONLNdw™Nµ
  3890. * Jglobal gFontStyleList := {'Bold','Italic','Outline', 'Underline','Shadow',†ó°ñ°dONLNdõ¿‡+¢ (Superscript','Subscript','–Small Caps'};†ó°ñ†ó°ñ°dONLNdˆÀN÷\(Ûl-### Name of the Plain (style) menu item  ####†ó°ñ°dONLNd%÷N· * #global gPlainStyle := "Plain Text";°dONLNdK÷J·‘)¸# Plain-Style menu item†ó°ñ†ó°ñ°dONLNddÏN˜(l## How to get to the next line†ó°ñ°dONLNdјNˆ* global gNextLineMethod := 1;†ó°ñ°dONLNd•N
  3891. Ú* F### 1 - ReturnKey,  2 - EnterKey, 3 - DownArrow Key, 4 - TabKey, {} - †ó°ñ°dONLNdÏ
  3892. N˛* HMove/Click, {'Untitled'} - Move relative to the window titled 'Untitled'†ó°ñ°dONLNd6N#r* /Click†ó°ñ†ó°ñ°dONLNd@.N9Ü*4### Does moving to the next line clear all font info†ó°ñ°dONLNdv9ND>* (global gNextLineClearsFontSettings := 0;†ó°ñ†ó°ñ°dONLNd•O<ZT(wZend;°dONLNd™O`Zÿ)$#InitMacDrawProTools†óˇ
  3893. ò◊#ˇ ˇˇˇˇ#◊°ñ 
  3894. _,Times
  3895. .ˇ°dONLNdˇˇ(⁄Z60°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ,    Monaco
  3896.     °dONLNd)<4Ú(QZI#########################################################################†ó°ñ°dONLNdJ4<?B* #°dONLNdP4ñ? )ZMacDrawModifyDocument()†ó°ñ°dONLNdh?<JÚ(gZI#========================================================================†ó°ñ°dONLNd≤J<Ur*     # Author:°dONLNdæJ®U¥)lML†ó°ñ°dONLNd¡U<`ê(}Z# Description:°dONLNd—U®`2)lModify MacDraw Document†ó°ñ°dONLNdÈ`<kä(àZ
  3897. # Parameters:°dONLNd¯`®k¿)lNone†ó°ñ°dONLNd˝k<vx(ìZ
  3898. # Returns:°dONLNd
  3899. k®v“)lNothing†ó°ñ°dONLNdv<Å~(ûZ # Examples:°dONLNd v®Å8)lMacDrawModifyDocument();†ó°ñ°dONLNd9Å<åê(©Z# Assumptions:°dONLNdIÅ®å¿)lNone†ó°ñ°dONLNdOå<óñ(¥Z# Applications:°dONLNd_å®óÍ)l MacDraw Pro†ó°ñ°dONLNdkó<¢Ú(øZI#========================================================================†ó°ñ°dONLNdµ¢<≠x*
  3900. # History:†ó°ñ°dONLNd¿≠<∏B* #†ó°ñ°dONLNd¬∏<√Ú* I#########################################################################†ó°ñ°dONLNd √<Œ‰* task MacDrawModifyDocument()†ó°ñ°dONLNd)Œ<ŸZ* begin†ó°ñ°dONLNd0ŸN‰¸+ Scrapbook(global kScrapPict);†ó°ñ°dONLNdN‰<ÔT( Zend;†ó°ñ†ó°ñ°dONLNdS˙<Ú*I#########################################################################†ó°ñ°dONLNdù<B* #°dONLNd£ñ)ZMacDrawSetupDoText()†ó°ñ°dONLNd∏<Ú(8ZI#========================================================================†ó°ñ°dONLNd<&r*     # Author:°dONLNd
  3901. ñ&¢)ZML†ó°ñ°dONLNd&<1ê(NZ# Description:°dONLNd&ñ1Í)ZSets up DoText†ó°ñ°dONLNd.1<<ä(YZ
  3902. # Parameters:°dONLNd<1ñ<Æ)ZNone†ó°ñ°dONLNdA<<Gx(dZ
  3903. # Returns:°dONLNdM<ñG¿)ZNothing†ó°ñ°dONLNdUG<R~(oZ # Examples:°dONLNdbGñR)ZMacDrawSetupDoText();†ó°ñ°dONLNdxR<]ê(zZ# Assumptions:°dONLNdáRñ]Æ)ZNone†ó°ñ°dONLNdç]<hñ(ÖZ# Applications:°dONLNdù]®hÍ)l MacDraw Pro†ó°ñ°dONLNd©h<sÚ(êZI#========================================================================†ó°ñ°dONLNdÛs<~x*
  3904. # History:†ó°ñ°dONLNd˛~<âB* #†ó°ñ°dONLNdâ<îÚ* I#########################################################################†ó°ñ°dONLNdJî<ü“* task MacDrawSetupDoText()†ó°ñ°dONLNddü<™Z* begin†ó°ñ°dONLNdk™Nµ + #logstr("Setting up for DoText...");†ó°ñ°dONLNdêµN¿* SetTool(global SelectTool);°dONLNd≠µ¿‘)Δ # Deselects any selected objects†ó°ñ°dONLNdœ¿<ÀT(ËZend;†óˇ
  3905. @◊#ˇ ˇˇˇˇ#◊°ñ 
  3906. _,Times
  3907. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛61†ó°ñ,    Monaco
  3908.     °dONLNd)<4¯(QZJ##########################################################################†ó°ñ°dONLNdK4<?∫* #################### °dONLNdb4fi? )¢ Main script°dONLNdq4\?‘)~####################†ó°ñ°dONLNdÜ?<J¯(gZJ##########################################################################†ó°ñ°dONLNd—J<U* $script MacDrawPro (ScriptLevel:= -1)†ó°ñ°dONLNdˆU<`Z* begin†ó°ñ°dONLNd˝`Nk‰+ InitGlobals(ScriptLevel);°dONLNd`k⁄)Δ!# initialize your general globals†ó°ñ°dONLNd<kNvê(ìl InitDraw();†ó°ñ°dONLNdIvNÅñ* InitFonts();†ó°ñ°dONLNdWÅNå* "global gApptitle := "MacDraw Pro";†ó°ñ°dONLNd{åNóˆ* global gAppVersion := '1.5';°dONLNdôåóÏ)Δ$# version of app you will be running†ó°ñ°dONLNdøóN¢ˆ(ølSuiteStart('MacDrawPro.vu');°dONLNd›ó¢§)Δ# begin a new test suite†ó°ñ°dONLNd˜¢N≠( l## launch or twitch to your app†ó°ñ°dONLNd≠N∏b* .if LaunchTwitch("{gAppTitle}",gAliasDirectory)†ó°ñ°dONLNdI∏N√l* begin†ó°ñ°dONLNdQ√`Œí+ 3global gFileName := "@!@-{gBuildVers}-{gAppTitle}";†ó°ñ°dONLNdàŒ`Ÿò* 4global gModifyDocument:= task MacDrawModifyDocument;†ó°ñ°dONLNd¿Ÿ`‰V* )global gSetLine := Task SetLineMenuItems;°dONLNdΟn‰‘(å# Requires VU 2.0†ó°ñ°dONLNdˇ‰`Ô( ~## define app specific task†ó°ñ°dONLNdÔ`˙t* .global gSetupDoText:= task MacDrawSetupDoText;†ó°ñ°dONLNdO˙`Δ* InitAppGlobals();°dONLNdd˙§)¢# init app specific globals†ó°ñ°dONLNdÇ`‰(-~DoSetUpApp(,,,,1,1,1);†ó°ñ°dONLNdõ`ñ*     DoDraw();†ó°ñ°dONLNdß`&ñ*     DoText();†ó°ñ°dONLNd≥&`1¢* DoWindow();†ó°ñ°dONLNd¡1`<¥* DoCloseApp(1);†ó°ñ°dONLNd—<NGå(dl5end; # if LaunchTwitch("{gAppTitle}",gAliasDirectory)†ó°ñ°dONLNdGNRê* SuiteEnd();†ó°ñ°dONLNdR<]Ã(zZend; # script MacDrawPro†ó°ñ†óˇ:◊#ˇ ˇˇˇˇ#◊°ñ 
  3909. _,Times
  3910. .ˇ°dONLNdˇˇ(⁄Z62°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ,     Helvetica
  3911. °dONLNd6<H1(cZAppendix C - Sample Scripts TXT
  3912.  gXg
  3913. †ó°ñ†ó°ñ
  3914. °dONLNdV<bΔ*PThe following scripts are distributed as part of the SPEC S&L package for sample†ó°ñ°dONLNdmb<nÇ* purposes only:†ó°ñ†ó°ñ°dONLNd|z®ÜÃ+l• 4D.vu†ó°ñ°dONLNdÑÜ®í·* • Canvas.vu†ó°ñ°dONLNdêí®ûÓ* • ClarisCad.vu†ó°ñ°dONLNdüû®™Ê*
  3915. • Director.vu†ó°ñ°dONLNd≠™®∂fl* • Excel4.vu†ó°ñ°dONLNdπ∂®¬* • FileMakerPro.vu†ó°ñ°dONLNdÀ¬®ŒÍ*
  3916. • Freehand.vu†ó°ñ°dONLNdŸŒ®⁄* • Hypercard.vu†ó°ñ°dONLNdË⁄®ÊÌ* • Illustrator.vu†ó°ñ°dONLNd˘Ê®Ú˛* • MacDrawPro.vu†ó°ñ°dONLNd    Ú®˛Ó*
  3917. • MacWrite.vu†ó°ñ°dONLNd˛®
  3918. ¸* • Mathematica.vu†ó°ñ°dONLNd(
  3919. ®‡*     • MORE.vu†ó°ñ°dONLNd2®"Ô* • MSWorks.vu†ó°ñ°dONLNd?"®.Ù* • PageMaker.vu†ó°ñ°dONLNdN.®:Ú* • Persuasion.vu†ó°ñ°dONLNd^:®FÚ* • PhotoShop.vu†ó°ñ°dONLNdmF®R* • PixelPaintPro.vu†ó°ñ°dONLNdÄR®^ˆ* • PowerPoint.vu†ó°ñ°dONLNdê^®j˝* • QuarkXpress.vu†ó°ñ°dONLNd°j®vÊ* • Quicken.vu†ó°ñ°dONLNdÆv®ÇÈ*
  3920. • Studio32.vu†ó°ñ°dONLNdºÇ®é‚* • ThinkC.vu†ó°ñ°dONLNd»é®öŸ*     • Word.vu†ó°ñ°dONLNd“ö®¶fl*
  3921. • Word5.vu†ó°ñ°dONLNd›¶®≤˚* • WordPerfect.vu†ó°ñ†ó°ñ°dONLNdÓæ® ï*-• ConfigSys.vu (used in combination with MPW)†óˇÏ◊#ˇ ˇˇˇˇ#◊°ñ 
  3922. _,Times
  3923. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛63†ó°ñ,     Helvetica
  3924. °dONLNd6<Hk(cZ!Appendix D - Library Dependancies TXT
  3925.  gXg
  3926. †ó°ñ†ó°ñ
  3927. °dONLNd"V<ek*Library†ó°ñ°dONLNd*V¨e˛)p Dependancies†ó°ñ°d WORD€
  3928. ÑRë- áUá*†ó°ñ†ó°ñ
  3929. _
  3930. °dONLNd9y<Öu(°Z
  3931. Custom.Lib†ó°ñ°dONLNdDy¨Ö√)pnone†ó°ñ†ó°ñ°dONLNdKë<ù`(πZDA.Lib†ó°ñ°dONLNdRë¨ùæ)p5Output.Lib, TCS.Lib, LaunchQuit.Lib, TargetCheck.Lib,†ó°ñ°dONLNdàù¨©* UserInterface.Lib.†ó°ñ†ó°ñ°dONLNdùµ<¡z(›Z DoTasks.Lib†ó°ñ°dONLNd©µ¨¡)pEOutPut.Lib, Font.Lib, StandardFile.Lib, TCS.Lib, Draw.Lib, Print.Lib,†ó°ñ°dONLNdÔ¡¨Õ * ELaunchQuit.Lib, Misc.Lib, TargetCheck.Lib, DA.Lib, UserInterface.Lib.†ó°ñ†ó°ñ°dONLNd7Ÿ<Âj(ZDraw.Lib†ó°ñ°dONLNd@Ÿ¨Â“)p< Palette.Lib, String.Lib, OutPut.Lib, TCS.Lib, Geometry.Lib,†ó°ñ°dONLNd}¨Ò* UserInterface.Lib.†ó°ñ†ó°ñ°dONLNdí˝<    x(%Z FileTool.Lib†ó°ñ°dONLNdü˝¨    √)pnone†ó°ñ†ó°ñ°dONLNd¶<!n(=Z
  3932. Finder.Lib†ó°ñ°dONLNd±¨!Ë)p@Output.Lib, LaunchQuit.Lib, StandardFile.Lib, UserInterface.Lib.†ó°ñ†ó°ñ°dONLNdÙ-<9e(UZFont.Lib†ó°ñ°dONLNd˝-¨9o)p'TCS.Lib, UserInterface.Lib, OutPut.Lib.†ó°ñ†ó°ñ°dONLNd'E<Q(mZ Geometry.Lib†ó°ñ°dONLNd4E¨Q√)pnone†ó°ñ†ó°ñ°dONLNd;]<iq(ÖZ Gestalt.Lib†ó°ñ°dONLNdG]¨i?)pOnTarget.Lib, MathTool.vulib†ó°ñ†ó°ñ°dONLNdfu<Åt(ùZ Globals.Lib†ó°ñ°dONLNdru¨ÅË)p Custom.Lib.†ó°ñ†ó°ñ°dONLNdÄç<ôà(µZLaunchQuit.Lib†ó°ñ°dONLNdèç¨ô‡)p@TCS.Lib , Output.Lib, String.Lib, Gestalt.Lib, StandardFile.Lib,†ó°ñ°dONLNd–ô¨•£* 1OnTarget.Lib, TargetCheck.Lib, UserInterface.Lib.†ó°ñ†ó°ñ°dONLNd±<Ωg(ŸZMisc.Lib†ó°ñ°dONLNd
  3933. ±¨Ω¬)p7OutPut.Lib, LaunchQuit.Lib, TCS.Lib, UserInterface.Lib.†ó°ñ†ó°ñ°dONLNdG…<’}(ÒZ OnTarget.Lib†ó°ñ°dONLNdT…¨’√)pnone†ó°ñ†ó°ñ°dONLNd[·<Ìq(    Z
  3934. OutPut.Lib†ó°ñ°dONLNdf·¨Ì√)pnone†ó°ñ†ó°ñ°dONLNdm˘<p(!Z Palette.Lib†ó°ñ°dONLNdy˘¨q)p( TCS.Lib, Output.Lib, UserInterface.Lib.†ó°ñ†ó°ñ°dONLNd§<f(9Z    Print.Lib†ó°ñ°dONLNdƨn)p'Output.Lib, TCS.Lib, UserInterface.Lib.†ó°ñ†ó°ñ°dONLNdÿ)<5l(QZ
  3935. Select.Lib†ó°ñ°dONLNd„)¨5)pUserInterface.Lib.†ó°ñ†ó°ñ°dONLNd¯A<Må(iZStandardFile.Lib†ó°ñ°dONLNd    A¨M•)p3String.Lib, TCS.Lib, Output.Lib, UserInterface.Lib.†ó°ñ†ó°ñ°dONLNd?Y<el(ÅZ
  3936. String.Lib†ó°ñ°dONLNdJY¨e√)pnone†ó°ñ†ó°ñ°dONLNdQq<}ç(ôZTargetCheck.Lib†ó°ñ°dONLNdaq¨}‡)p
  3937. Output.Lib†ó°ñ†ó°ñ†ó°ñ†óˇˆ◊#ˇ ˇˇˇˇ#◊°ñ 
  3938. _,Times
  3939. .ˇ°dONLNdˇˇ(⁄Z64°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ
  3940. °dONLNd)<8k(TZLibrary†ó°ñ°dONLNd)¨8˛)p Dependancies†ó°ñ°d WORD€
  3941. WRd- ZUZ*†ó°ñ†ó°ñ
  3942. _
  3943. °dONLNdL<Xe(tZTCS.Lib†ó°ñ°dONLNdL¨XÚ)pFUtility.Lib, Gestalt.Lib, UserInterface.Lib, FileTool.Lib, String.Lib,†ó°ñ°dONLNdfX¨d‰* OutPut.Lib.†ó°ñ†ó°ñ°dONLNdtp<|e(òZText.Lib†ó°ñ°dONLNd}p¨|)pFont.Lib, String.Lib.†ó°ñ†ó°ñ°dONLNdïà<îê(∞ZUserInterface.Lib†ó°ñ°dONLNdßà¨îÎ)p@Geometry.Lib, String.Lib, Output.Lib, TCS.Lib, StandardFile.Lib.†ó°ñ†ó°ñ°dONLNd͆<¨n(»Z Utility.Lib†ó°ñ°dONLNdˆ†¨¨√)pnone†ó°ñ†ó°ñ°dONLNd˝∏<ƒô(‡ZWordProcessor.Lib†ó°ñ°dONLNd∏¨ƒK)p  DoTasks.Lib, UserInterface.Lib.†ó°ñ†ó°ñ†ó°ñ†óˇÆ◊#ˇ ˇˇˇˇ#◊°ñ 
  3944. _,Times
  3945. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛65†ó°ñ,     Helvetica
  3946. °dONLNd6<Hl(cZ#Appendix E - Tasks within Libraries TXT
  3947.  gXg
  3948. †ó°ñ†ó°ñ
  3949. °dONLNd$\<hx*!
  3950. Custom.Lib†ó°ñ°dONLNd/h<tú* TASK InitCustom()†ó°ñ†ó°ñ°dONLNdBÄ<åb*DA.Lib†ó°ñ°dONLNdIå<òD* 2TASK Scrapbook(requestElement, ccpFlag, pasteFlag)†ó°ñ†ó°ñ°dONLNd}§<∞}* DoTasks.Lib†ó°ñ°dONLNdâ∞<ºH* /TASK DoDraw(pTestMethod, pSpecifier, pNumTimes)†ó°ñ°dONLNdπº<»±* ATASK DoWindow(pTestMethod, pSpecifier, pRestoreWindow, pNumTimes)†ó°ñ°dONLNd˚»<‘ * #TASK DoText(pTestMethod, pNumTimes)†ó°ñ°dONLNd‘<‡À* ITASK DoFiles(pTestMethod, pFileName, pSaveAsFlag, pSelectOpen, pRevertMI)†ó°ñ°dONLNdi‡<Ï‹* HTASK DoSetUpApp(pDismissOpeningDialog, pDefaultWindowSpec, pNewDocPath, †ó°ñ°dONLNdµÏ®¯ +l ApDismissNewDocDialog, pScrapText, pScrapPict,  pSaveDoc,pOpenDoc)†ó°ñ°dONLNd˜¯<”( ZKTASK DoCloseApp(pSaveRevert, pDismissAboutBox, pPageSetup, pPrinter, pQuit)†ó°ñ†ó°ñ°dONLNdC<m*Draw.Lib†ó°ñ°dONLNdL<(ë* TASK InitDraw()†ó°ñ°dONLNd\(<4* %TASK CheckObjectStruct(pObjectStruct)†ó°ñ°dONLNdÇ4<@* *TASK DrawObject(pObjectStruct, pSpecifier)†ó°ñ°dONLNd≠@<L.* .TASK SetAttributes(pObjectStruct, pDrawObject)†ó°ñ°dONLNd‹L<X©* TASK UseClickTool()†ó°ñ°dONLNdX<dó* >TASK UseDragTool(pPoint, pSpecifier, pMouseDown, pDClickToEnd)†ó°ñ°dONLNd0d<pƒ* GTASK UseDragClickTool(pPointList, pSpecifier, pMouseDown, pDClickToEnd)†ó°ñ°dONLNdxp<|z* ;TASK UseMultiDragTool(pPointList, pSpecifier, pDClickToEnd)†ó°ñ°dONLNdµ|<à|* <TASK UseMultiClickTool(pPointList, pSpecifier, pDClickToEnd)†ó°ñ°dONLNdÛà<îî* @TASK UseMultiClickDragTool(pPointList, pSpecifier, pDClickToEnd)†ó°ñ°dONLNd5î<† * TASK MakePointList(pInset)†ó°ñ°dONLNdQ†<¨<* /TASK SetTool(pTool, pSelectTool, pObjectNumber)†ó°ñ°dONLNdŨ<∏Í* TASK GenerateObject(pTheObject)†ó°ñ°dONLNd¢∏<ƒ* )TASK SetPointList(pTheObject, pSpecifier)†ó°ñ°dONLNdÃ<–·* PTASK Draw(pTheTool, pThePointList, pThePattern, pTheLine, pTheColor, pSpecifier)†ó°ñ°dONLNd–<‹\* 5TASK SetColor(pTheColor, pSelectColor, pObjectNumber)†ó°ñ°dONLNdT‹<ËL* 2TASK SetLine(pTheLine, pSelectLine, pObjectNumber)†ó°ñ°dONLNdàË<ÙÉ* ;TASK SetLineMenuItems(pTheLine, pSelectLine, pObjectNumber)†ó°ñ°dONLNd≈Ù<p* ;TASK SetPattern(pThePattern, pSelectPattern, pObjectNumber)†ó°ñ°dONLNd< †* TASK CheckSetup()†ó°ñ†ó°ñ°dONLNd<${* FileTool.Lib†ó°ñ°dONLNd!$<0Ê* TASK InitFileTool(pOnTheTarget)†ó°ñ†ó°ñ°dONLNdA<<Hs*
  3951. Finder.Lib†ó°ñ°dONLNdLH<TÆ* TASK HelpBalloons(n)†ó°ñ°dONLNdaT<`* 'TASK FinderNavigate(PathList, OpenFlag)†ó°ñ°dONLNdâ`<lÊ* TASK ShimmerMateCopy(Source)†ó°ñ†óˇ p◊#ˇ ˇˇˇˇ#◊°ñ 
  3952. _,Times
  3953. .ˇ°dONLNdˇˇ(⁄Z66°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)<5i(QZFont.Lib†ó°ñ°dONLNd    5<Aë* TASK InitFonts()†ó°ñ°dONLNdA<M * $TASK SetFont(pMyFont, pObjectNumber)†ó°ñ°dONLNd@M<Y* &TASK SetStyle(pMyStyle, pObjectNumber)†ó°ñ°dONLNdhY<e* $TASK SetSize(pMySize, pObjectNumber)†ó°ñ°dONLNdée<qì* TASK NextLine()†ó°ñ°dONLNdûq<}/* *TASK RandomFontRecords(pCurrentFontRecord)†ó°ñ°dONLNd…}<â¿* TASK WaterFallFontTest()†ó°ñ°dONLNd„â<ï«* TASK QuickLookTextTest()†ó°ñ°dONLNd˝ï<°ï* ?TASK SetFontParams(pFontRecord, pResetPlainFlag, pObjectNumber)†ó°ñ°dONLNd=°<≠n* 6TASK ReportSelectedMenuItems(pMenuList, pObjectNumber)†ó°ñ†ó°ñ°dONLNduπ<≈Ñ* Geometry.Lib†ó°ñ°dONLNdÇ≈<—¬* TASK CenterPointOfRect()†ó°ñ°dONLNdõ—<›‚*  TASK PtInRect(thePoint, theRect)†ó°ñ°dONLNdº›<ȇ* TASK RndPtInWindow(specifier)†ó°ñ°dONLNd⁄È<ı»* TASK RndPtInRect(theRect)†ó°ñ°dONLNdÙı<“* TASK RectInRect(rect1, rect2)†ó°ñ°dONLNd<
  3954. Ú* TASK GetXYRandom(inset, numPts)†ó°ñ†ó°ñ°dONLNd3<%u* Gestalt.Lib†ó°ñ°dONLNd?%<1ò* TASK CheckVM()†ó°ñ°dONLNdN1<=¢* TASK CheckCache()†ó°ñ°dONLNd`=<Iî* TASK FileShare()†ó°ñ°dONLNdqI<U¿* TASK FormLongNumber()†ó°ñ°dONLNdáU<a∂* TASK GestaltFPUType()†ó°ñ°dONLNdùa<mæ* TASK GestaltIsPowerPC()†ó°ñ°dONLNdµm<y * TASK GestaltMachineType()†ó°ñ°dONLNdœy<Öœ* TASK GestaltProcessorType()†ó°ñ°dONLNdÎÖ<ëæ* TASK GestaltMMUType()†ó°ñ°dONLNdë<ù‹* TASK GestaltLogicalRAMSize()†ó°ñ°dONLNdù<©‡* TASK GestaltPhysicalRAMSize()†ó°ñ°dONLNd<©<µÁ*  TASK GestaltSystemArchitecture()†ó°ñ°dONLNd]µ<¡* $TASK MachineState(printMachineState)†ó°ñ°dONLNdÇ¡<Õ§* TASK OnTargetInit()†ó°ñ†ó°ñ°dONLNdñŸ<Âx* Globals.Lib†ó°ñ°dONLNd¢Â<Ò* !TASK InitGlobals(pTheScriptParam)†ó°ñ°dONLNd≈Ò<˝∂* TASK InitRandomSeed()†ó°ñ°dONLNd€˝<    ¢* TASK PrintGlobals()†ó°ñ°dONLNdÔ    <.* -TASK SetTestLevel(pTestLevel, pCustomSetting)†ó°ñ†óˇ Ï◊#ˇ ˇˇˇˇ#◊°ñ 
  3955. _,Times
  3956. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛67†ó°ñ°dONLNd)<5è(QZLaunchQuit.Lib†ó°ñ°dONLNd5<Aø* TASK Twitcher(appName)†ó°ñ°dONLNd'A<M-* ,TASK MiniLaunch(appTitle, LaunchApp, SetDir)†ó°ñ°dONLNdTM<Yo* 6TASK PatchLaunchTwitcher(AppName, AliasDir, LaunchApp)†ó°ñ°dONLNdåY<e€* JTASK Quit(OverWrite, DocName, HowQuit, CloseScrapbook, CloseFinderWindows)†ó°ñ°dONLNd◊e<qœ* TASK QuitBackgroundApps()†ó°ñ°dONLNdÚq<}ù* TASK TwitchQuit()†ó°ñ°dONLNd}<âß* TASK LaunchAssist()†ó°ñ°dONLNdâ<ï*  TASK LaunchByAppleMenu(ItemName)†ó°ñ°dONLNd<ï<°.* *TASK LaunchByTypeSelect(AppName, AliasDir)†ó°ñ°dONLNdh°<≠»* TASK LaunchFillMemApp()†ó°ñ°dONLNdÅ≠<πê* =TASK LaunchTwitch(AppName, AliasDir, LaunchApp, SuiteBailOut)†ó°ñ°dONLNdøπ<≈¥* TASK PreFlight(myList)†ó°ñ†ó°ñ°dONLNd÷—<›å*MathTool.vulib†ó°ñ°dONLNd›<È[* (none)†ó°ñ°dONLNdÏÈ<ıi* Misc.Lib†ó°ñ°dONLNdıı<¿* TASK CenterofRectClick()†ó°ñ°dONLNd<
  3957. ·* TASK DoSpecialTest(WhichTest)†ó°ñ°dONLNd-
  3958. <* TASK AboutBox(DismissAboutBox)†ó°ñ†ó°ñ°dONLNdL%<1É* OnTarget.Lib†ó°ñ°dONLNdY1<=[* (none)†ó°ñ†ó°ñ°dONLNd`I<Uw*
  3959. OutPut.Lib†ó°ñ°dONLNdkU<a—* TASK LogStr(str, LogPriority)†ó°ñ†ó°ñ°dONLNdäm<yt* Palette.Lib†ó°ñ°dONLNdñy<Ö&* ,TASK PalettePicker(elemStruct, ObjectNumber)†ó°ñ°dONLNd√Ö<ëÚ* TASK SelFromDocWind(elemStruct)†ó°ñ°dONLNd„ë<ùÌ* TASK SelFromPalWind(elemStruct)†ó°ñ°dONLNdù<©Á* TASK SelFromPullOff(elemStruct)†ó°ñ°dONLNd#©<µ.* +TASK SelFromCoord(elemStruct, ObjectNumber)†ó°ñ°dONLNdOµ<¡‰* TASK SelFromPopUp(elemStruct)†ó°ñ°dONLNdm¡<Õ‡* TASK SelFromScroll(elemStruct)†ó°ñ°dONLNdåÕ<ŸÛ*  TASK GetRandomElement(palStruct)†ó°ñ†ó°ñ°dONLNd≠Â<Òk*    Print.Lib†ó°ñ°dONLNd∑Ò<˝* YTASK TestPageSetup(checkBoxTest, paperSizeTest, pageSizeTest, orientationTest, printTest)†ó°ñ°dONLNd˝<    * #TASK TestCheckBoxList(checkBoxList)†ó°ñ°dONLNd5    <ñ* TASK PaperSize()†ó°ñ°dONLNdF<!í* TASK PageSize()†ó°ñ°dONLNdV!<-æ* TASK ToggleOrientation()†ó°ñ°dONLNdo-<9°* TASK PrintSample()†ó°ñ°dONLNdÇ9<Eñ* TASK PrintAlert()†ó°ñ°dONLNdîE<Q* 'TASK PageSetup(WhichDevice, PagSetupMI)†ó°ñ°dONLNdΩQ<]¨* TASK Printer(PrintMI)†ó°ñ†óˇP◊#ˇ ˇˇˇˇ#◊°ñ 
  3960. _,Times
  3961. .ˇ°dONLNdˇˇ(⁄Z68°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)<5n(QZ
  3962. Select.Lib†ó°ñ°dONLNd 5<A›* TASK SelectIt(ProcID, PtorRect)†ó°ñ°dONLNd+A<M˜* "TASK PointSelect (Pt, RelToWindow)†ó°ñ°dONLNdNM<Yˇ* #TASK RectSelect (Rect, RelToWindow)†ó°ñ°dONLNdrY<eæ* TASK HereToStartSelect()†ó°ñ°dONLNdãe<qª* TASK HereToEndSelect()†ó°ñ°dONLNd¢q<}í* TASK SelectAll()†ó°ñ†ó°ñ°dONLNd≥â<ïî*StandardFile.Lib†ó°ñ°dONLNdƒï<°á* =TASK SaveAs(pNameDoc, pReplaceFlag, pSelectSaveAs, pPathlist)†ó°ñ°dONLNd°<≠Å* =TASK OpenFile(pNameDoc, pSelectOpen, pPathList, pPartialPath)†ó°ñ°dONLNdB≠<πè* ATASK SFNavigate(pPathList, pTEToggle, pFinalReturn, pPartialPath)†ó°ñ°dONLNdÖπ<≈|* =TASK SFType(pPathList, pTEToggle, pFinalReturn, pPartialPath)†ó°ñ°dONLNd√≈<—$* )TASK ReplaceExist(pReplaceFlag, pNameDoc)†ó°ñ°dONLNdÓ—<›T* 0TASK GetNewFileName(pFileName, pIncludeNameFlag)†ó°ñ°dONLNd›<È8* *TASK SFSelectPopupMenuItem(pPopupMenuItem)†ó°ñ°dONLNdJÈ<ıº* TASK ModifyDocument()†ó°ñ°dONLNd`ı<∫* TASK Revert(pRevertMI)†ó°ñ°dONLNdw<
  3963. Ã* TASK IsStandardFile(pLogIt)†ó°ñ°dONLNdì
  3964. <P* 0TASK CancelStandardFile(pHowCancel, pSaveAsMenu)†ó°ñ°dONLNdƒ<%¿* TASK Save(pSaveMethod)†ó°ñ†ó°ñ°dONLNd€1<=q*
  3965. String.Lib†ó°ñ°dONLNdÊ=<I»* TASK IsSubString(str1, str2)†ó°ñ°dONLNdI<Uÿ* TASK PointListToStr(pointList)†ó°ñ°dONLNd"U<a‡* !TASK FindPos(char, str, startPos)†ó°ñ°dONLNdDa<m* *TASK Substring(String, StartChar, NumChar)†ó°ñ°dONLNdom<y€* TASK RandomString(NumChar)†ó°ñ°dONLNdãy<ÖH* 5TASK FormPositiveInteger(str, start_index, end_index)†ó°ñ°dONLNd¡Ö<ëœ* TASK CharToDigit(character)†ó°ñ°dONLNd›ë<ù„* TASK StripCarriageReturn(pLine)†ó°ñ°dONLNd˝ù<©’* KTASK StringUntilChar(pTheString, pTheChar, pIncludeTheChar, pNumOccurences)†ó°ñ°dONLNdI©<µF* /TASK NumTimesCharInString(pTheString, pTheChar)†ó°ñ°dONLNdyµ<¡÷* KTASK StringAfterChar(pTheString, pTheChar, pIncludeTheChar, pNumOccurences)†ó°ñ†ó°ñ°dONLNd≈Õ<Ÿî*TargetCheck.Lib†ó°ñ°dONLNd’Ÿ<Âà* TASK Restart()†ó°ñ°dONLNd‰Â<Ò0* ,TASK MatchApplication(logMe, UpdateAppTitle)†ó°ñ†ó°ñ°dONLNd˝<    h*TCS.Lib†ó°ñ°dONLNd    <!* )TASK InitTCSLogging(pSetupFileToolOutput)†ó°ñ°dONLNdD<!2* *TASK TCSStart(pTCSID, pTextDesc, pAppName)†ó°ñ°dONLNdo!<-¿* GTASK TCSEnd(pTCSID, pResultCode, pErrStr, pTCSVal, pTCSStr, pResultStr,†ó°ñ°dONLNd∑-<9~* pDumpStack)†ó°ñ°dONLNd√9<E}* >TASK SuiteStart(pScriptName, pScriptParamList, pScriptVersion)†ó°ñ°dONLNdE<QÍ* TASK SuiteEnd(pCompletionCode)†ó°ñ†ó°ñ°dONLNd!]<ih*Text.Lib†ó°ñ°dONLNd*i<u‘* TASK TypeWord(pNumChars)†ó°ñ°dONLNdCu<ÅË* TASK TypeSentence(pNumWords)†ó°ñ°dONLNdaÅ<ç˝* !TASK TypeParagraph(pNumSentences)†ó°ñ†óˇ®◊#ˇ ˇˇˇˇ#◊°ñ 
  3966. _,Times
  3967. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛69†ó°ñ°dONLNd)<5ó(QZUserInterface.Lib†ó°ñ°dONLNd5<A9* +TASK SelectMenuItem(pMenu1, pMenu2, pMenu3)†ó°ñ°dONLNd?A<M‚* TASK FindMenu(pTheMenuItem)†ó°ñ°dONLNd[M<Y8* +TASK KeyEq(pKeyEquiv, pOtherkey, pNumTimes)†ó°ñ°dONLNdàY<e* NTASK TestWindow(pSpecifier, pFunctionList, pRestoreWindow, pNumTimes, pDragXY)†ó°ñ°dONLNdÿe<qΔ* ITASK WindowFunction(pSpecifier, pTheFunction, pDragXY, pDestinationPoint)†ó°ñ°dONLNd#q<}+* +TASK DragAcrossScreens(pSpecifier, pDragXY)†ó°ñ°dONLNdP}<â(* +TASK SizeAcrossScreens(pSpecifier, pDragXY)†ó°ñ°dONLNd}â<ï¯* !TASK AdjustRectToScreen(pTheRect)†ó°ñ°dONLNd†ï<°\* 2TASK CoverCompletely (pFirstWindow, pSecondWindow)†ó°ñ°dONLNd”°<≠Ï* TASK ResetWindow(pTheWindow)†ó°ñ°dONLNdÒ≠<πfi* TASK SelectWindow(pSpecifier)†ó°ñ°dONLNdπ<≈<* ,TASK UnCoverWindow(pSpecifier, pFrontWindow)†ó°ñ°dONLNd=≈<—Δ* LTASK DragWindow(pHorizontalPixels, pVerticalPixels, pSpecifier, pAbsolutely)†ó°ñ°dONLNdã—<›ö* BTASK SizeWindow(pPixelsWide, pPixelsHigh, pSpecifier, pAbsolutely)†ó°ñ°dONLNdœ›<È›* TASK ZoomWindow(pSpecifier)†ó°ñ°dONLNdÏÈ<ı≠* @TASK CloseWindow(pHowClose, pOverWrite, pSpecifier, pNewDocName)†ó°ñ°dONLNd.ı<ú* ATASK ScrollWindow(pWhichScrollBar, pDesirePosition, pMaxPosition)†ó°ñ°dONLNdq<
  3968. ª* TASK GetVHScrollBars()†ó°ñ°dONLNdà
  3969. <æ* TASK CloseAllWindows()†ó°ñ°dONLNdü<%÷* TASK FindWindow(pSpecifier)†ó°ñ°dONLNdº%<1§* ATASK GetRandomPointsRelativeToWindow(pInset, pSpecifier, pNumPts)†ó°ñ°dONLNd˛1<=Á* TASK SelectButton(pButtonName)†ó°ñ°dONLNd=<I * (TASK SelectRadioButton(pRadioButtonName)†ó°ñ°dONLNdHI<U * "TASK SelectCheckBox(pCheckBoxName)†ó°ñ°dONLNdlU<a¡* TASK CheckYesNo(pFlag)†ó°ñ°dONLNdÉa<mæ* ETASK DialogCheck(pFindStaticText, pCommitButton, pLogIT, pWindowDesc)†ó°ñ°dONLNd m<yfi* TASK DialogHandler(pSpecifier)†ó°ñ°dONLNdÈy<Ö9* .TASK DismissDialog (pHowToDismiss, pSpecifier)†ó°ñ°dONLNdÖ<ë* UTASK MoveRelativeToWindow(pHorizontalPixels, pVerticalPixels, pSpecifier, pMouseDown,†ó°ñ°dONLNdoëfiùF+¢ pInset, WhichCorner)†ó°ñ°dONLNdÑù<©‘(≈ZKTASK MoveMouse(pHorizontalPixels, pVerticalPixels, pAbsolutely, pMouseDown)†ó°ñ°dONLNd–©<µ¬* TASK TypeStr(pTheString)†ó°ñ°dONLNd͵<¡\* 6TASK TypeList(pStringList, pSpecialKey, pTypeFinalKey)†ó°ñ°dONLNd"¡<ÕH* -TASK SpecialKey(pTheKey, pKeyName, pNumTimes)†ó°ñ†ó°ñ°dONLNdQŸ<Âq* Utility.Lib†ó°ñ°dONLNd]Â<Ò∑* TASK Timer(timeParam)†ó°ñ°dONLNdtÒ<˝†* TASK BeginTimer()†ó°ñ°dONLNdá˝<    ñ* TASK EndTimer()†ó°ñ°dONLNdò    <4* -TASK GetCurrentTime(NeedMeridian, returnDate)†ó°ñ†ó°ñ°dONLNdΔ!<-†*WordProcessor.Lib†ó°ñ°dONLNdÿ-<9¢* TASK DoWPTools()†ó°ñ†óˇ
  3970. z◊#ˇ ˇˇˇˇ#◊°ñ 
  3971. _,Times
  3972. .ˇ°dONLNdˇˇ(⁄Z70°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ,     Helvetica
  3973. °dONLNd6<H”(cZ/Appendix F - Task Listing Sorted Alphabetically TXT
  3974.  gXg
  3975. †ó°ñ†ó°ñ
  3976. °dONLNd0V`bû+$
  3977. Task Names°dONLNd;VJbò)Í
  3978. Library Names†ó°ñ°dONLNdIh`tí(ê~AboutBox°dONLNdRhJtu)ÍMisc.Lib†ó°ñ°dONLNd[z`Ü√(¢~AdjustRectToScreen°dONLNdnzJÜû)ÍUserInterface.Lib†ó°ñ°dONLNdÄå`òô(¥~
  3979. BeginTimer°dONLNdãåJò|)Í Utility.Lib†ó°ñ°dONLNdóû`™æ(Δ~CancelStandardFile°dONLNd™ûJ™ö)ÍStandardFile.Lib†ó°ñ°dONLNdª∞`ºπ(ÿ~CenterofRectClick°dONLNdÕ∞Jºu)ÍMisc.Lib†ó°ñ°dONLNd÷¬`Œª(Í~CenterPointOfRect°dONLNdˬJŒç)Í Geometry.Lib†ó°ñ°dONLNdı‘`‡ù(¸~ CharToDigit°dONLNd‘J‡z)Í
  3980. String.Lib†ó°ñ°dONLNd Ê`Úú(~
  3981. CheckCache°dONLNdÊJÚ)Í Gestalt.Lib†ó°ñ°dONLNd#¯`ª( ~CheckObjectStruct°dONLNd5¯Jx)ÍDraw.Lib†ó°ñ°dONLNd>
  3982. `ô(2~
  3983. CheckSetup°dONLNdI
  3984. Jx)ÍDraw.Lib†ó°ñ°dONLNdR`(ë(D~CheckVM°dONLNdZJ()Í Gestalt.Lib†ó°ñ°dONLNdf.`:ü(V~
  3985. CheckYesNo°dONLNdq.J:û)ÍUserInterface.Lib†ó°ñ°dONLNdÉ@`L∏(h~CloseAllWindows°dONLNdì@JLû)ÍUserInterface.Lib†ó°ñ°dONLNd•R`^§(z~ CloseWindow°dONLNd±RJ^û)ÍUserInterface.Lib†ó°ñ°dONLNd√d`pµ(å~CoverCompletely°dONLNd”dJpû)ÍUserInterface.Lib†ó°ñ°dONLNdÂv`Çü(û~ DialogCheck°dONLNdÒvJÇû)ÍUserInterface.Lib†ó°ñ°dONLNdà`îß(∞~
  3986. DialogHandler°dONLNdàJîû)ÍUserInterface.Lib†ó°ñ°dONLNd#ö`¶ß(¬~
  3987. DismissDialog°dONLNd1öJ¶û)ÍUserInterface.Lib†ó°ñ°dONLNdC¨`∏û(‘~
  3988. DoCloseApp°dONLNdN¨J∏à)Í DoTasks.Lib†ó°ñ°dONLNdZæ` â(Ê~DoDraw°dONLNdaæJ à)Í DoTasks.Lib†ó°ñ°dONLNdm–`‹Ö(¯~DoFiles°dONLNdu–J‹à)Í DoTasks.Lib†ó°ñ°dONLNdÅ‚`Ó°(
  3989. ~
  3990. DoSetUpApp°dONLNdå‚JÓà)Í DoTasks.Lib†ó°ñ°dONLNdòÙ`¶(~
  3991. DoSpecialTest°dONLNd¶ÙJu)ÍMisc.Lib†ó°ñ°dONLNdØ`Ñ(.~DoText°dONLNd∂Jà)Í DoTasks.Lib†ó°ñ°dONLNd¬`$õ(@~    DoWPTools°dONLNdÃJ$ß)ÍWordProcessor.Lib†ó°ñ°dONLNdfi*`6ó(R~DoWindow°dONLNdÁ*J6à)Í DoTasks.Lib†ó°ñ°dONLNdÛ<`Hæ(d~DragAcrossScreens°dONLNd<JHû)ÍUserInterface.Lib†ó°ñ°dONLNdN`Z°(v~
  3992. DragWindow°dONLNd"NJZû)ÍUserInterface.Lib†ó°ñ°dONLNd4``lz(à~Draw°dONLNd9`Jlx)ÍDraw.Lib†ó°ñ°dONLNdBr`~ö(ö~
  3993. DrawObject°dONLNdMrJ~x)ÍDraw.Lib†ó°ñ°dONLNdVÑ`êç(¨~    FileShare°dONLNd`ÑJê)Í Gestalt.Lib†óˇ$◊#ˇ ˇˇˇˇ#◊°ñ 
  3994. _,Times
  3995. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛71†ó°ñ°dONLNd)`5û(Q~
  3996. Task Names°dONLNd )J5ò)Í
  3997. Library Names†ó°ñ°dONLNd;`Gë(c~FindMenu°dONLNd";JGû)ÍUserInterface.Lib†ó°ñ°dONLNd4M`Yá(u~FindPos°dONLNd<MJYz)Í
  3998. String.Lib†ó°ñ°dONLNdG_`kü(á~
  3999. FindWindow°dONLNdR_Jkû)ÍUserInterface.Lib†ó°ñ°dONLNddq`}™(ô~FinderNavigate°dONLNdsqJ}|)Í
  4000. Finder.Lib†ó°ñ°dONLNd~É`è¬(´~FormPositiveInteger°dONLNdíÉJèz)Í
  4001. String.Lib†ó°ñ°dONLNdùï`°´(Ω~GenerateObject°dONLNd¨ïJ°x)ÍDraw.Lib†ó°ñ°dONLNdµß`≥∞(œ~GestaltFPUType°dONLNdƒßJ≥)Í Gestalt.Lib†ó°ñ°dONLNd–π`≈÷(·~GestaltLogicalRAMSize°dONLNdÊπJ≈)Í Gestalt.Lib†ó°ñ°dONLNdÚÀ`◊∏(Û~GestaltMMUType°dONLNdÀJ◊)Í Gestalt.Lib†ó°ñ°dONLNd
  4002. ›`ȃ(~GestaltMachineType°dONLNd ›JÈ)Í Gestalt.Lib†ó°ñ°dONLNd,Ô`˚⁄(~GestaltPhysicalRAMSize°dONLNdCÔJ˚)Í Gestalt.Lib†ó°ñ°dONLNdO`
  4003. …()~GestaltProcessorType°dONLNddJ
  4004. )Í Gestalt.Lib†ó°ñ°dONLNdp`Ø(;~GetCurrentTime°dONLNdJ|)Í Utility.Lib†ó°ñ°dONLNdã%`1∑(M~GetNewFileName°dONLNdö%J1ö)ÍStandardFile.Lib†ó°ñ°dONLNd´7`C¡(_~GetRandomElement°dONLNdº7JC~)Í Palette.Lib†ó°ñ°dONLNd»I`U(q~GetRandomPointsRelativeToWindow°dONLNdËIJUû)ÍUserInterface.Lib†ó°ñ°dONLNd˙[`gµ(É~GetVHScrollBars°dONLNd
  4005. [Jgû)ÍUserInterface.Lib†ó°ñ°dONLNdm`y´(ï~ GetXYRandom°dONLNd(mJyâ)Í Geometry.lib†ó°ñ°dONLNd5`ã°(ß~ HelpBalloons°dONLNdBJã|)Í
  4006. Finder.Lib†ó°ñ°dONLNdMë`ùµ(π~HereToEndSelect°dONLNd]ëJùz)Í
  4007. Select.Lib†ó°ñ°dONLNdh£`Ø∏(À~HereToStartSelect°dONLNdz£JØz)Í
  4008. Select.Lib†ó°ñ°dONLNdÖµ`¡ñ(›~
  4009. InitCustom°dONLNdêµJ¡É)Í
  4010. Custom.Lib†ó°ñ°dONLNdõ«`”ã(Ô~InitDraw°dONLNd§«J”x)ÍDraw.Lib†ó°ñ°dONLNd≠Ÿ`Âô(~ InitFileTool°dONLNd∫ŸJÂÜ)Í FileTool.Lib†ó°ñ°dONLNd«Î`˜ã(~    InitFonts°dONLNd—ÎJ˜s)ÍFont.Lib†ó°ñ°dONLNd⁄˝`    ï(%~ InitGlobals°dONLNdÊ˝J    Ç)Í Globals.Lib†ó°ñ°dONLNdÚ`∞(7~InitRandomSeed°dONLNdJÇ)Í Globals.Lib†ó°ñ°dONLNd
  4011. !`-Ø(I~InitTCSLogging°dONLNd!J-s)ÍTCS.Lib†ó°ñ°dONLNd$3`?•([~IsStandardFile°dONLNd33J?ö)ÍStandardFile.Lib†ó°ñ°dONLNdDE`Qò(m~ IsSubString°dONLNdPEJQz)Í
  4012. String.Lib†ó°ñ°dONLNd[W`cÅ(~KeyEq°dONLNdaWJcû)ÍUserInterface.Lib†ó°ñ°dONLNdsi`uê(ë~EndTimer°dONLNd|iJu|)Í Utility.Lib†ó°ñ°dONLNdà{`áÀ(£~LaunchByAppleMenu°dONLNdö{Jáñ)ÍLaunchQuit.Lib†ó°ñ°dONLNd©ç`ô«(µ~LaunchByTypeSelect°dONLNdºçJôñ)ÍLaunchQuit.Lib†óˇ
  4013. ‰◊#ˇ ˇˇˇˇ#◊°ñ 
  4014. _,Times
  4015. .ˇ°dONLNdˇˇ(⁄Z72°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)`5û(Q~
  4016. Task Names°dONLNd )J5ò)Í
  4017. Library Names†ó°ñ°dONLNd;`G°(c~ LaunchAssist°dONLNd&;JGñ)ÍLaunchQuit.Lib†ó°ñ°dONLNd5M`Y¬(u~LaunchFillMemApp°dONLNdFMJYñ)ÍLaunchQuit.Lib†ó°ñ°dONLNdU_`k•(á~ LaunchTwitch°dONLNdb_Jkñ)ÍLaunchQuit.Lib†ó°ñ°dONLNdqq`}Å(ô~LogStr°dONLNdxqJ})Í
  4018. OutPut.Lib†ó°ñ°dONLNdÉÉ`è°(´~ MachineState°dONLNdêÉJè)Í Gestalt.Lib†ó°ñ°dONLNdúï`°ß(Ω~
  4019. MakePointList°dONLNd™ïJ°x)ÍDraw.Lib†ó°ñ°dONLNd≥ß`≥∑(œ~MatchApplication°dONLNdƒßJ≥õ)ÍTargetCheck.Lib†ó°ñ°dONLNd‘π`≈õ(·~
  4020. MiniLaunch°dONLNdflπJ≈ñ)ÍLaunchQuit.Lib†ó°ñ°dONLNdÓÀ`◊µ(Û~ModifyDocument°dONLNd˝ÀJ◊ö)ÍStandardFile.Lib†ó°ñ°dONLNd›`Èú(~    MoveMouse°dONLNd›JÈû)ÍUserInterface.Lib†ó°ñ°dONLNd*Ô`˚⁄(~MoveRelativeToWindow°dONLNd?ÔJ˚û)ÍUserInterface.Lib†ó°ñ°dONLNdQ`
  4021. ç()~NextLine°dONLNdZJ
  4022. s)ÍFont.Lib†ó°ñ°dONLNdc`‘(;~NumTimesCharInString°dONLNdxJz)Í
  4023. String.Lib†ó°ñ°dONLNdÉ%`1û(M~ OnTargetInit°dONLNdê%J1)Í Gestalt.Lib†ó°ñ°dONLNdú7`Cå(_~OpenFile°dONLNd•7JCö)ÍStandardFile.Lib†ó°ñ°dONLNd∂I`Uí(q~    PageSetup°dONLNd¿IJUt)Í    Print.Lib†ó°ñ°dONLNd [`gã(É~PageSize°dONLNd”[Jgt)Í    Print.Lib†ó°ñ°dONLNd›m`yü(ï~
  4024. PalettePicker°dONLNdÎmJy~)Í Palette.Lib†ó°ñ°dONLNd˜`ãè(ß~    PaperSize°dONLNdJãt)Í    Print.Lib†ó°ñ°dONLNd ë`ù…(π~PatchLaunchTwitcher°dONLNdëJùñ)ÍLaunchQuit.Lib†ó°ñ°dONLNd.£`Øß(À~PointListToStr°dONLNd=£JØz)Í
  4025. String.Lib†ó°ñ°dONLNdHµ`¡ñ(›~ PointSelect°dONLNdTµJ¡z)Í
  4026. Select.Lib†ó°ñ°dONLNd_«`”å(Ô~    PreFlight°dONLNdi«J”ñ)ÍLaunchQuit.Lib†ó°ñ°dONLNdxŸ`Âè(~
  4027. PrintAlert°dONLNdÉŸJÂt)Í    Print.Lib†ó°ñ°dONLNdçÎ`˜ú(~ PrintGlobals°dONLNdöÎJ˜Ç)Í Globals.Lib†ó°ñ°dONLNd¶˝`    õ(%~ PrintSample°dONLNd≤˝J    t)Í    Print.Lib†ó°ñ°dONLNdº`Ä(7~Printer°dONLNdƒJt)Í    Print.Lib†ó°ñ°dONLNdŒ!`-â(I~PtInRect°dONLNd◊!J-â)Í Geometry.lib†ó°ñ°dONLNd‰3`?¡([~QuickLookTextTest°dONLNdˆ3J?s)ÍFont.Lib†ó°ñ°dONLNdˇE`Qu(m~Quit°dONLNdEJQñ)ÍLaunchQuit.Lib†ó°ñ°dONLNdW`c…(~QuitBackgroundApps°dONLNd&WJcñ)ÍLaunchQuit.Lib†ó°ñ°dONLNd5i`u•(ë~ RandomString°dONLNdBiJuz)Í
  4028. String.Lib†ó°ñ°dONLNdM{`áï(£~
  4029. RectInRect°dONLNdX{Jáâ)Í Geometry.lib†ó°ñ°dONLNdeç`ôì(µ~
  4030. RectSelect°dONLNdpçJôz)Í
  4031. Select.Lib†óˇ
  4032. Ê◊#ˇ ˇˇˇˇ#◊°ñ 
  4033. _,Times
  4034. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛73†ó°ñ°dONLNd)`5û(Q~
  4035. Task Names°dONLNd )J5ò)Í
  4036. Library Names†ó°ñ°dONLNd;`G≈(c~RandomFontRecords°dONLNd+;JGs)ÍFont.Lib†ó°ñ°dONLNd4M`Yü(u~ ReplaceExist°dONLNdAMJYö)ÍStandardFile.Lib†ó°ñ°dONLNdR_`kfl(á~ReportSelectedMenuItems°dONLNdj_Jks)ÍFont.Lib†ó°ñ°dONLNdsq`}£(ô~ ResetWindow°dONLNdqJ}û)ÍUserInterface.Lib†ó°ñ°dONLNdëÉ`èÅ(´~Restart°dONLNdôÉJèõ)ÍTargetCheck.Lib†ó°ñ°dONLNd©ï`°(Ω~Revert°dONLNd∞ïJ°ö)ÍStandardFile.Lib†ó°ñ°dONLNd¡ß`≥ù(œ~ RndPtInRect°dONLNdÕßJ≥â)Í Geometry.lib†ó°ñ°dONLNd⁄π`≈±(·~
  4037. RndPtInWindow°dONLNdËπJ≈â)Í Geometry.lib†ó°ñ°dONLNdıÀ`◊ò(Û~
  4038. SFNavigate°dONLNdÀJ◊ö)ÍStandardFile.Lib†ó°ñ°dONLNd›`È€(~SFSelectPopupMenuItem°dONLNd'›JÈö)ÍStandardFile.Lib†ó°ñ°dONLNd8Ô`˚Ö(~SFType°dONLNd?ÔJ˚ö)ÍStandardFile.Lib†ó°ñ°dONLNdP`
  4039. w()~Save°dONLNdUJ
  4040. ö)ÍStandardFile.Lib†ó°ñ°dONLNdf`Ñ(;~SaveAs°dONLNdmJö)ÍStandardFile.Lib†ó°ñ°dONLNd~%`1ì(M~    Scrapbook°dONLNdà%J1n)ÍDA.Lib†ó°ñ°dONLNdè7`C•(_~ ScrollWindow°dONLNdú7JCû)ÍUserInterface.Lib†ó°ñ°dONLNdÆI`Uß(q~ SelFromCoord°dONLNdªIJU~)Í Palette.Lib†ó°ñ°dONLNd«[`g∑(É~SelFromDocWind°dONLNd÷[Jg~)Í Palette.Lib†ó°ñ°dONLNd‚m`y≥(ï~SelFromPalWind°dONLNdÒmJy~)Í Palette.Lib†ó°ñ°dONLNd˝`ã™(ß~ SelFromPopUp°dONLNd
  4041. Jã~)Í Palette.Lib†ó°ñ°dONLNdë`ù≠(π~SelFromPullOff°dONLNd%ëJù~)Í Palette.Lib†ó°ñ°dONLNd1£`Ø•(À~
  4042. SelFromScroll°dONLNd?£JØ~)Í Palette.Lib†ó°ñ°dONLNdKµ`¡å(›~    SelectAll°dONLNdUµJ¡z)Í
  4043. Select.Lib†ó°ñ°dONLNd`«`”ù(Ô~ SelectButton°dONLNdm«J”û)ÍUserInterface.Lib†ó°ñ°dONLNdŸ`ÂØ(~SelectCheckBox°dONLNdéŸJÂû)ÍUserInterface.Lib†ó°ñ°dONLNd†Î`˜Ñ(~SelectIt°dONLNd©ÎJ˜z)Í
  4044. Select.Lib†ó°ñ°dONLNd¥˝`    Ø(%~SelectMenuItem°dONLNd√˝J    û)ÍUserInterface.Lib†ó°ñ°dONLNd’`∫(7~SelectRadioButton°dONLNdÁJû)ÍUserInterface.Lib†ó°ñ°dONLNd˘!`-¶(I~ SelectWindow°dONLNd!J-û)ÍUserInterface.Lib†ó°ñ°dONLNd3`?ü([~
  4045. SetAttributes°dONLNd&3J?x)ÍDraw.Lib†ó°ñ°dONLNd/E`Qä(m~SetColor°dONLNd8EJQx)ÍDraw.Lib†ó°ñ°dONLNdAW`cÖ(~SetLine°dONLNdIWJcx)ÍDraw.Lib†ó°ñ°dONLNdRi`uª(ë~SetLineMenuItems°dONLNdciJux)ÍDraw.Lib†ó°ñ°dONLNdl{`áë(£~
  4046. SetPattern°dONLNdw{Jáx)ÍDraw.Lib†ó°ñ°dONLNdÄç`ôÖ(µ~SetFont°dONLNdàçJôs)ÍFont.Lib†óˇ
  4047. ™◊#ˇ ˇˇˇˇ#◊°ñ 
  4048. _,Times
  4049. .ˇ°dONLNdˇˇ(⁄Z74°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)`5û(Q~
  4050. Task Names°dONLNd )J5ò)Í
  4051. Library Names†ó°ñ°dONLNd;`G®(c~
  4052. SetFontParams°dONLNd';JGs)ÍFont.Lib†ó°ñ°dONLNd0M`Yõ(u~ SetPointList°dONLNd=MJYx)ÍDraw.Lib†ó°ñ°dONLNdF_`kÉ(á~SetSize°dONLNdN_Jks)ÍFont.Lib†ó°ñ°dONLNdWq`}á(ô~SetStyle°dONLNd`qJ}s)ÍFont.Lib†ó°ñ°dONLNdiÉ`èü(´~ SetTestLevel°dONLNdvÉJèÇ)Í Globals.Lib†ó°ñ°dONLNdÇï`°Ö(Ω~SetTool°dONLNdäïJ°x)ÍDraw.Lib†ó°ñ°dONLNdìß`≥æ(œ~ShimmerMateCopy°dONLNd£ßJ≥|)Í
  4053. Finder.Lib†ó°ñ°dONLNdÆπ`≈ª(·~SizeAcrossScreens°dONLNd¿πJ≈û)ÍUserInterface.Lib†ó°ñ°dONLNd“À`◊ù(Û~
  4054. SizeWindow°dONLNd›ÀJ◊û)ÍUserInterface.Lib†ó°ñ°dONLNdÔ›`Èó(~
  4055. SpecialKey°dONLNd˙›JÈû)ÍUserInterface.Lib†ó°ñ°dONLNd Ô`˚≠(~StringAfterChar°dONLNdÔJ˚z)Í
  4056. String.Lib†ó°ñ°dONLNd'`
  4057. ≠()~StringUntilChar°dONLNd7J
  4058. z)Í
  4059. String.Lib†ó°ñ°dONLNdB`¡(;~StripCarriageReturn°dONLNdVJz)Í
  4060. String.Lib†ó°ñ°dONLNda%`1ç(M~    Substring°dONLNdk%J1z)Í
  4061. String.Lib†ó°ñ°dONLNdv7`Cã(_~SuiteEnd°dONLNd7JCs)ÍTCS.Lib†ó°ñ°dONLNdáI`Uè(q~
  4062. SuiteStart°dONLNdíIJUs)ÍTCS.Lib†ó°ñ°dONLNdö[`gâ(É~TCSEnd°dONLNd°[Jgs)ÍTCS.Lib†ó°ñ°dONLNd©m`yå(ï~TCSStart°dONLNd≤mJys)ÍTCS.Lib†ó°ñ°dONLNd∫`ãπ(ß~TestCheckBoxList°dONLNdÀJãt)Í    Print.Lib†ó°ñ°dONLNd’ë`ùß(π~
  4063. TestPageSetup°dONLNd„ëJùt)Í    Print.Lib†ó°ñ°dONLNdÌ£`Øù(À~
  4064. TestWindow°dONLNd¯£JØû)ÍUserInterface.Lib†ó°ñ°dONLNd
  4065. µ`¡}(›~Timer°dONLNdµJ¡|)Í Utility.Lib†ó°ñ°dONLNd«`”∏(Ô~ToggleOrientation°dONLNd.«J”t)Í    Print.Lib†ó°ñ°dONLNd8Ÿ`Âó(~
  4066. TwitchQuit°dONLNdCŸJÂñ)ÍLaunchQuit.Lib†ó°ñ°dONLNdRÎ`˜ã(~Twitcher°dONLNd[ÎJ˜ñ)ÍLaunchQuit.Lib†ó°ñ°dONLNdj˝`    ã(%~TypeList°dONLNds˝J    û)ÍUserInterface.Lib†ó°ñ°dONLNdÖ`©(7~
  4067. TypeParagraph°dONLNdìJs)ÍText.Lib†ó°ñ°dONLNdú!`-£(I~ TypeSentence°dONLNd©!J-s)ÍText.Lib†ó°ñ°dONLNd≤3`?Ü([~TypeStr°dONLNd∫3J?û)ÍUserInterface.Lib†ó°ñ°dONLNdÃE`Qì(m~TypeWord°dONLNd’EJQs)ÍText.Lib†ó°ñ°dONLNdfiW`cµ(~
  4068. UnCoverWindow°dONLNdÏWJcû)ÍUserInterface.Lib†ó°ñ°dONLNd˛i`u£(ë~ UseClickTool°dONLNd iJux)ÍDraw.Lib†ó°ñ°dONLNd{`áª(£~UseDragClickTool°dONLNd%{Jáx)ÍDraw.Lib†ó°ñ°dONLNd.ç`ô°(µ~ UseDragTool°dONLNd:çJôx)ÍDraw.Lib†óˇr◊#ˇ ˇˇˇˇ#◊°ñ 
  4069. _,Times
  4070. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛75†ó°ñ°dONLNd)`5û(Q~
  4071. Task Names°dONLNd )J5ò)Í
  4072. Library Names†ó°ñ°dONLNd;`G’(c~UseMultiClickDragTool°dONLNd/;JGx)ÍDraw.Lib†ó°ñ°dONLNd8M`YΩ(u~UseMultiClickTool°dONLNdJMJYx)ÍDraw.Lib†ó°ñ°dONLNdS_`kª(á~UseMultiDragTool°dONLNdd_Jkx)ÍDraw.Lib†ó°ñ°dONLNdmq`}∫(ô~WaterFallFontTest°dONLNdqJ}s)ÍFont.Lib†ó°ñ°dONLNdàÉ`è≥(´~WindowFunction°dONLNdóÉJèû)ÍUserInterface.Lib†ó°ñ°dONLNd©ï`°•(Ω~
  4073. ZoomWindow°dONLNd¥ïJ°û)ÍUserInterface.Lib†óˇ◊#ˇ ˇˇˇˇ#◊°ñ 
  4074. _,Times
  4075. .ˇ°dONLNdˇˇ(⁄Z76°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ,     Helvetica
  4076. °dONLNd6<H¨(cZ)Appendix G - Global Variables & Constants TXT
  4077.  gXg
  4078. †ó°ñ†ó°ñ
  4079. °dONLNd*V<b—*RThe following section describes the global variables that are used within SPEC S&L
  4080. ∂°dONLNd|V—b÷(~Ô. 
  4081. ∂°dONLNd~V÷bË)It is†ó°ñ°dONLNdÑb<n‡(äZYimportant to understand that the majority of global variables used are actually constants
  4082. @°dONLNd›b·n„(äˇ.†ó°ñ
  4083. °dONLNdfln<z‚(ñZ\It is appropriate to set certain global variables prior to execution, however they will stay†ó°ñ°dONLNd<z<ÜÆ* constant during runtime
  4084. "¿°dONLNdSzØÜ±)s.†ó°ñ†ó°ñ
  4085. °dONLNdVí<ûÂ(∫Z\ The reason that we use 'constants' instead of passing parmeters is that a great deal of the†ó°ñ°dONLNd≥û<™‰* Zinformation contained within our data structure to 'model' the application is constant and†ó°ñ°dONLNd™<∂€* Xused by many of the routines within the libraries, therefore passing this information by†ó°ñ°dONLNdg∂<¬ı* $way of parameter would be redundant.†ó°ñ†ó°ñ°dONLNdçŒ<⁄ *UEach of the following sections describe global variables that affect various areas of†ó°ñ°dONLNd„⁄<Êy*
  4086. functionality
  4087. –¿°dONLNd⁄yÊ~)=. 
  4088. –¿°dONLNdÚ⁄~Ê¡)DThe tasks containing the global variables are InitGlobals, InitDraw,†ó°ñ°dONLNd7Ê<Ú“(ZSInitFonts and InitRandomSeed. The section header will indicate the name of the task†ó°ñ°dONLNdãÚ<˛Ë* \which initializes the global variables, and the library in which the global variables should†ó°ñ°dONLNd˲<
  4089. ¨* be set and/or initialized
  4090.  °dONLNd˛¨
  4091. ±)p. 
  4092.  °dONLNd˛±
  4093. Á)@The actual global variable name will appear in bold, followed by†ó°ñ°dONLNdD
  4094. <È(2Z\a description of the functionality the global variable provides, possible values, whether or†ó°ñ°dONLNd°<"◊* Ynot it can be modified, the tasks that use the global variable, and the tasks that modify†ó°ñ°dONLNd˚"<.S* them
  4095. ~İdONLNdˇ"T.Y). 
  4096. ~İdONLNd"Y.Á)UIf there are no task names in the 'Modified by' field, you can assume that no library†ó°ñ°dONLNdW.<:Á(VZ$routines modify the global variable.†ó°ñ†ó°ñ
  4097. °dONLNd~L<[* #Initialized In The Initglobals Task†ó°ñ°dONLNd¢Z<ix*    Task name
  4098. °dONLNd¨]Ñi»)H- InitGlobals()†ó°ñ
  4099. °dONLNdºi<xm(îZLocation
  4100. °dONLNd≈lÑx√)H
  4101. - Globals.Lib†ó°ñ
  4102. °dONLNd”x<ám(£Z
  4103. Initialize
  4104. °dONLNdfi{Ñá#)H"- Must be initialized from within tİdONLNd{$áH)†scripts pİdONLNd{Iá√)%prior to making any calls.†ó°ñ†ó°ñ°dONLNd#ô`ß≤(¬~
  4105. Miscellaneous†ó°ñ†ó°ñ°dONLNd1π`≈±*gAliasDirectory†ó°ñ°dONLNdC≈Ñ—æ+$ Description z@°dONLNdO≈ø—¬);:†ó°ñ°dONLNdR—盂(˘´ELaunching applications requires knowing where the application resides
  4106. °dONLNdó—„›Â(˘.†ó°ñ
  4107. °dONLNdô›çÈñ(´7SPEC S&L utilizes aliases to short cut this requirement
  4108. o¿°dONLNd–›óÈú(µ. 
  4109. o¿°dONLNd“›úÈŒ) An alias is†ó°ñ°dONLNdfiÈçı‰(´Kcreated for all of the applications that will have scripts executed against†ó°ñ°dONLNd*ıç§* them
  4110. ~İdONLNd.ı•™). 
  4111. ~İdONLNd0ı™‡)CThese aliases are palced in a directory, which in turn has an alias†ó°ñ°dONLNdtç
  4112. ¡()´ made for it
  4113. $°dONLNd¬
  4114. «)5. 
  4115. $°dONLNdÅ«
  4116. Ω)3This alias is placed in the Apple Menu Items folder
  4117. b@°dONLNd¥Ω
  4118. ø)ˆ.†ó°ñ
  4119. °dONLNd∑
  4120. ÑÕ(5¢Possible values'°dONLNdΔ
  4121. Œ—)J:†ó°ñ°dONLNd ç%™(A´String†ó°ñ°dONLNd“%Ñ1’(M¢Can be ModifiedœÄ°dONLNd·%’1Û)Q:   Yes†ó°ñ°dONLNdÈ1Ñ=±(Y¢    Used by :}İdONLNdÚ1≤=ù).4 Scripts use this directly to pass as a parameter to†ó°ñ°dONLNd'=çIj(e´+LaunchTwitch() when launching applications.†ó°ñ°dONLNdUIÑU≈(q¢
  4122. Modified by :}°dONLNdbIΔUÌ)B      Scripts†óˇ◊#ˇ ˇˇˇˇ#◊°ñ 
  4123. _,Times
  4124. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛77†ó°ñ°dONLNd)`5ì(Q~    gAppTitle†ó°ñ°dONLNd 5ÑAª+$ Descriptionz@°dONLNd5ºAø)8:†ó°ñ°dONLNdAçMΩ(i´?This contains the name of the current application and should be†ó°ñ°dONLNdXMçYŸ* Gexplicitly defined by script upon launching applications to insure that†ó°ñ°dONLNd†Yçe+* "the correct application is running
  4125. °dONLNd¬Y,e1)ü. 
  4126. °dONLNdƒY1e«)This is a part of the SPEC S&L†ó°ñ°dONLNd„eçq€(ç´Fapplication verification scheme(see task ApplicationVerification() for†ó°ñ°dONLNd*qç}Œ* more details).†ó°ñ°dONLNd:}ÑâÕ(•¢Possible values'°dONLNdI}Œâ—)J:†ó°ñ°dONLNdKâçï™(±´String†ó°ñ°dONLNdRïѰ’(Ω¢Can be ModifiedœÄ°dONLNdaï’°Ì)Q: Yes†ó°ñ°dONLNdh°Ñ≠Æ(…¢Used by (°dONLNdp°Ø≠’)+6: Scrapbook(), DoWindow(), DoSetUpApp(), DoCloseApp(),†ó°ñ°dONLNd®≠Ñπâ(’¢9  Twitcher(), Quit(), Revert(), TCSStart(), SuiteStart(),†ó°ñ°dONLNd„πÑ≈.* %  ApplicationVerification(), Scripts.†ó°ñ°dONLNd    ≈Ñ—¬* Modified by 'İdONLNd≈√—€)?8:  MatchApplication() (Note: Both LaunchTwitch(), Quit()†ó°ñ°dONLNdO—<›B(˘Z  °dONLNdS—Ñ›¶)H=modify it indirectly by way of a call to MatchApplication()).†ó°ñ†ó°ñ°dONLNdëÈ`ıú(~
  4127. gAppVerify†ó°ñ°dONLNdùıѪ+$ Descriptionz@°dONLNd®ıºø)8:†ó°ñ°dONLNd™ç
  4128. ◊()´BSPEC S&L has a background task which verifies that the application†ó°ñ°dONLNdÌ
  4129. ñÇ+     4that is currently active is the intended application
  4130. æÄ°dONLNd!
  4131. Çá)Ï. 
  4132. æÄ°dONLNd#
  4133. á÷)The gAppVerify†ó°ñ°dONLNd2ñ%|(A¥/turns this verification scheme OFF(0) or ON(1).†ó°ñ°dONLNdc%Ñ1Õ(M¢Possible values'°dONLNdr%Œ1—)J:†ó°ñ°dONLNdt1ç=
  4134. (Y´Integer - Boolean ( 0 or 1 )†ó°ñ°dONLNdí=ÑI’(e¢Can be ModifiedœÄ°dONLNd°=’IÌ)Q: Yes†ó°ñ°dONLNd®IÑUÆ(q¢Used by (°dONLNd∞IØUfi)+
  4135. : LogStr()†ó°ñ°dONLNdªUÑaø(}¢ Modified by'İdONLNdΔU¿a…)<8: LaunchTwitch(), Quit(), and Scripts prior to or during†ó°ñ°dONLNdˇañmæ(â¥runtime.†ó°ñ†ó°ñ°dONLNd    y`Öô(°~
  4136. gBuildVers†ó°ñ°dONLNdÖÑëª+$ Descriptionz@°dONLNd!Öºëø)8:†ó°ñ°dONLNd$ëçù€(π´FThis is contains the version of system software on the target machine.†ó°ñ°dONLNdlùÑ©Õ(≈¢Possible values'°dONLNd{ùŒ©—)J:†ó°ñ°dONLNd}©çµ™(—´String†ó°ñ°dONLNdܵѡ’(›¢Can be ModifiedœÄ°dONLNdïµ’¡È)Q: No†ó°ñ°dONLNdö¡ÑÕÆ(È¢Used by (°dONLNd¢¡ØÕæ)+;: Scripts - to include the current version of the Operating†ó°ñ°dONLNdflÕÑŸm(ı¢1  System in filenames generated during test runs.†ó°ñ°dONLNdŸÑ¬* Modified by 'İdONLNdŸ√‡)?: none†ó°ñ†ó°ñ°dONLNd%Ò`˝Ÿ(~gCustomNewDocDialog†ó°ñ°dONLNd9˝Ñ    æ+$ Description z@°dONLNdE˝ø    ¬);:†ó°ñ°dONLNdG    Ñ⁄(1¢I   Define this as a window descriptor if you want to override the default†ó°ñ°dONLNdëç!‹+     Dwindow descriptor ([window o:1 s:dialog]) for dismissing any dialogs†ó°ñ°dONLNd÷!ç-Ë* Hthat appear right after selecting the New menu item from the File menu..†ó°ñ°dONLNd-ç9* Used in DoSetUpApp().†ó°ñ°dONLNd59ÑEÕ(a¢Possible values'°dONLNdD9ŒE—)J:†ó°ñ°dONLNdHEñQˆ(m¥Window descriptors†ó°ñ°dONLNd[QÑ]’(y¢Can be ModifiedœÄ°dONLNdjQ’]Û)Q:   Yes†ó°ñ°dONLNdr]Ñi±(Ö¢    Used by :}İdONLNd{]≤i).  DoSetUpApp()†ó°ñ°dONLNdäiÑu≈(ë¢
  4137. Modified by :}°dONLNdóiΔuÍ)B Scripts†óˇD◊#ˇ ˇˇˇˇ#◊°ñ 
  4138. _,Times
  4139. .ˇ°dONLNdˇˇ(⁄Z78°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)`5€(Q~gCustomOpeningDialog†ó°ñ°dONLNd5ÑAæ+$ Description z@°dONLNd!5øA¬);:†ó°ñ°dONLNd#AÑM⁄(i¢I   Define this as a window descriptor if you want to override the default†ó°ñ°dONLNdmMçY‹+     Dwindow descriptor ([window o:1 s:dialog]) for dismissing any dialogs†ó°ñ°dONLNd≤Yçe°* 8that appear right after launching. Used in DoSetUpApp().†ó°ñ°dONLNdÎeÑqÕ(ç¢Possible values'°dONLNd˙eŒq—)J:†ó°ñ°dONLNd˛qñ}ˆ(ô¥Window descriptors†ó°ñ°dONLNd}Ñâ’(•¢Can be ModifiedœÄ°dONLNd }’âÛ)Q:   Yes†ó°ñ°dONLNd(âÑï±(±¢    Used by :}İdONLNd1â≤ï‰).
  4140.   DoText()†ó°ñ°dONLNd<ïѰ¬(Ω¢ Modified by 'İdONLNdHï√°Í)?    : Scripts†ó°ñ†ó°ñ°dONLNdR≠`π”(’~gCustomRetrievedDoc†ó°ñ°dONLNdgπÑ≈æ+$ Description z@°dONLNdsπø≈¬);:†ó°ñ°dONLNdu≈Ñ—⁄(Ì¢I   Define this as a window descriptor if you want to override the default†ó°ñ°dONLNdø—ç›Δ+     >window descriptor ([window g:true z:true t:?DocName]!) used in†ó°ñ°dONLNd˛›çÈ«* OpenFile ().†ó°ñ°dONLNd ÈÑıÕ(¢Possible values'°dONLNdÈŒı—)J:†ó°ñ°dONLNdıñˆ(¥Window descriptors†ó°ñ°dONLNd1Ñ
  4141. ’()¢Can be ModifiedœÄ°dONLNd@’
  4142. Û)Q:   Yes†ó°ñ°dONLNdH
  4143. ѱ(5¢    Used by :}İdONLNdQ
  4144. ≤Ÿ).      Scripts†ó°ñ°dONLNd[Ñ%¬(A¢ Modified by 'İdONLNdg√%‡)?: none†ó°ñ†ó°ñ°dONLNdo1`=†(Y~
  4145. gDBLogging†ó°ñ°dONLNd{=ÑIª+$ Descriptionz@°dONLNdÜ=ºIø)8:†ó°ñ°dONLNdàIçUÅ(q´3Indicates whether or not to output database records†ó°ñ°dONLNdΩUÑaÕ(}¢Possible values'°dONLNdÃUŒa—)J:†ó°ñ°dONLNdœañmÍ(â¥Boolean ( 0 or 1 )†ó°ñ°dONLNd‚mÑy’(ï¢Can be ModifiedœÄ°dONLNdÒm’yÛ)Q:   Yes†ó°ñ°dONLNd˘yÑÖÆ(°¢Used by (°dONLNdyØÖõ)+1: TCSStart(), TCSEnd(), SuiteStart(), SuiteEnd().†ó°ñ°dONLNd3ÖÑë¬(≠¢ Modified by 'İdONLNd?Ö√ëÇ)?):  Scripts - To suppress database output.†ó°ñ†ó°ñ°dONLNdjù`©ù(≈~
  4146. gDebugFlag†ó°ñ°dONLNdv©Ñµª+$ Descriptionz@°dONLNdÅ©ºµø)8:†ó°ñ°dONLNdɵç¡⁄(›´FIndicates whether or not debugging values within the libraries will be†ó°ñ°dONLNd ¡çÕ±* printed.†ó°ñ°dONLNd‘ÕÑŸÕ(ı¢Possible values'°dONLNd„ÕŒŸ—)J:†ó°ñ°dONLNdÊŸñÂ(¥Integer - Boolean ( 0 or 1 )†ó°ñ°dONLNdÂÑÒ’(
  4147. ¢Can be ModifiedœÄ°dONLNdÂ’ÒÛ)Q:   Yes†ó°ñ°dONLNdÒÑ˝Æ(¢Used by (°dONLNd"ÒØ˝π)+5: DoDraw(), TCSEnd(), and the majorityof tasks within†ó°ñ°dONLNdY˝Ñ    (%¢  Draw.Lib and Palette.Lib.†ó°ñ°dONLNdu    Ñ¬* Modified by 'İdONLNdÅ    √ê)?*:  Scripts - normally only when debugging.†ó°ñ†óˇΔ◊#ˇ ˇˇˇˇ#◊°ñ 
  4148. _,Times
  4149. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛79†ó°ñ°dONLNd)`5≈(Q~gDisableAllLogging†ó°ñ°dONLNd5ÑAª+$ Descriptionz@°dONLNd5ºAø)8:†ó°ñ°dONLNd!AçM‰(i´HThis is used to suppress any logging from LogStr(). This can be reset at†ó°ñ°dONLNdjMçYÅ* 4any point in a script where logging is undesireable.†ó°ñ°dONLNd†YÑeÕ(Å¢Possible values'°dONLNdØYŒe—)J:†ó°ñ°dONLNd≤eñq(ç¥Integer - Boolean ( 0 or 1 )†ó°ñ°dONLNdœqÑ}’(ô¢Can be ModifiedœÄ°dONLNdfiq’}Ì)Q: Yes†ó°ñ°dONLNd‰}ÑâÆ(•¢Used by (°dONLNdÏ}Øâ·)+ : LogStr(),†ó°ñ°dONLNd¯âÑï¬(±¢ Modified by 'İdONLNdâ√ïŸ)?4:  DrawObject(), SelFromDocWind(), SelFromPalWind(),†ó°ñ°dONLNd:ïç°fi(Ω´B  SelFromCoord(), SelFromPopUp(), PageSize(), ToggleOrientation(),†ó°ñ°dONLNd}°ñ≠+     SFSelectPopupMenuItem()
  4150. ðdONLNdî°≠)É. 
  4151. ðdONLNdñ°≠⁄)'(Note: All Library routines that modify†ó°ñ°dONLNdæ≠ñπî(’¥9this return it to its previous state prior to completion)†ó°ñ†ó°ñ°dONLNd¯≈`—ô(Ì~
  4152. gIsSystem7†ó°ñ°dONLNd—Ñ›ª+$ Descriptionz@°dONLNd—º›ø)8:†ó°ñ°dONLNd›çÈÈ(´HIndicates whether the current Operating System is System 7.0 or greater.†ó°ñ°dONLNd[ÈÑıÕ(¢Possible values'°dONLNdjÈŒı—)J:†ó°ñ°dONLNdmıñ(¥Integer - Boolean ( 0 or 1 )†ó°ñ°dONLNdãÑ
  4153. ’()¢Can be ModifiedœÄ°dONLNdö’
  4154. È)Q: No†ó°ñ°dONLNd†
  4155. ÑÆ(5¢Used by (°dONLNd®
  4156. Ø‚)+?: Twitcher(), Quit(), TwitchQuit(), LaunchTwitch(), OpenFile(),†ó°ñ°dONLNdÈÑ%◊(A¢   ReplaceExist().†ó°ñ°dONLNd˝%Ñ1¬* Modified by 'İdONLNd    %√1‡)?: none†ó°ñ†ó°ñ°dONLNd=`IÆ(e~gLastSavedFile†ó°ñ°dONLNd!IÑUª+$ Descriptionz@°dONLNd,IºUø)8:†ó°ñ°dONLNd.Uça¡(}´BThis contains the name of the last file that was saved by the task†ó°ñ°dONLNdqaçmº*     SaveAs().†ó°ñ°dONLNd{mÑyÕ(ï¢Possible values'°dONLNdämŒy—)J:†ó°ñ°dONLNdåyçÖ™(°´String†ó°ñ°dONLNdìÖÑë’(≠¢Can be ModifiedœÄ°dONLNd¢Ö’ë7)Q:  Only by SaveAs().†ó°ñ°dONLNd∑ëÑùÆ(π¢Used by (°dONLNdøëØùZ)+":DoFiles(),CloseWindow(), Scripts.†ó°ñ°dONLNd„ùÑ©¬(≈¢ Modified by 'İdONLNdÔù√©¯)? : SaveAs().†ó°ñ†ó°ñ°dONLNd˚µ`¡ï(›~    gLogLevel†ó°ñ°dONLNd¡ÑÕª+$ Descriptionz@°dONLNd¡ºÕø)8:†ó°ñ°dONLNdÕçŸÿ(ı´AThe output from many of the SPEC S&L routines are funneled thru a†ó°ñ°dONLNdWŸç—* Csingle task LogStr(). The gLogLevel is used to specify what type of†ó°ñ°dONLNdõÂçÒ* output LogStr() should print
  4157. %°dONLNd∑ÂÒ)à. 
  4158. %°dONLNdπÂÒ§)(see LogStr for more details)†ó°ñ°dONLNdŸÒÑ˝Õ(¢Possible values'°dONLNdËÒŒ˝—)J:†ó°ñ°dONLNdͽ砠  (%´Integer value between 0 and 5†ó°ñ°dONLNd
  4159.     Ñ’(1¢Can be ModifiedœÄ°dONLNd    ’Ì)Q: Yes†ó°ñ°dONLNd Ñ!Æ(=¢Used by (°dONLNd(Ø!*)+: LogStr() in 'Output.Lib'.†ó°ñ°dONLNdE!Ñ-¬(I¢ Modified by 'İdONLNdQ!√-k)?%: Scripts prior to or during runtime.†óˇ4◊#ˇ ˇˇˇˇ#◊°ñ 
  4160. _,Times
  4161. .ˇ°dONLNdˇˇ(⁄Z80°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)`5©(Q~ gLogStrCount†ó°ñ°dONLNd
  4162. 5<A?(]Z °dONLNd5ÑAª)H Descriptionz@°dONLNd5ºAø)8:†ó°ñ°dONLNdAçM…(i´CThis is used by LogStr() to count the number of output lines it has†ó°ñ°dONLNd`MçYø*
  4163. processed.†ó°ñ°dONLNdkYÑeÕ(Å¢Possible values'°dONLNdzYŒe—)J:†ó°ñ°dONLNd|eçqÆ(ç´Integer†ó°ñ°dONLNdÑqÑ}’(ô¢Can be ModifiedœÄ°dONLNdìq’}4)Q:  Only by LogStr().†ó°ñ°dONLNd®}ÑâÆ(•¢Used by (°dONLNd∞}Øâfi)+
  4164. :LogStr().†ó°ñ°dONLNdºâÑï¬(±¢ Modified by 'İdONLNd»â√ïı)? : LogStr().†ó°ñ†ó°ñ°dONLNd‘°`≠∞(…~ gMachineName†ó°ñ°dONLNd·≠Ñπæ+$ Description z@°dONLNdÌ≠øπ¬);:†ó°ñ°dONLNdÔπÑ≈(·¢   Name of the target machine.†ó°ñ°dONLNd≈Ñ—Õ* Possible values'°dONLNd≈Œ——)J:†ó°ñ°dONLNd!—ñ›≥(˘¥String†ó°ñ°dONLNd(›ÑÈ’(¢Can be ModifiedœÄ°dONLNd7›’ÈÔ)Q:   No†ó°ñ°dONLNd>ÈÑı±(¢    Used by :}İdONLNdGÈ≤ı`).$  TCSEnd(), SuiteEnd(), SuiteStart()†ó°ñ°dONLNdlıÑ≈(¢
  4165. Modified by :}°dONLNdyıΔ‡)B none†ó°ñ†ó°ñ°dONLNdÄ
  4166. `Œ(5~gPatchLaunchTwitch†ó°ñ°dONLNdîÑ%ª+$ Descriptionz@°dONLNdüº%ø)8:†ó°ñ°dONLNd°%ç1÷(M´AIndicates whether or not the standard launching mechanism in SPEC†ó°ñ°dONLNd„1ç=‰* S&L will be used.†ó°ñ°dONLNdˆ=ÑIÕ(e¢Possible values'°dONLNd=ŒI—)J:†ó°ñ°dONLNdIçUŸ(q´@Boolean - 0 (Use Standard Launching Mechanism) or 1  (Use custom†ó°ñ°dONLNdHUña+     Launching Mechanism)†ó°ñ°dONLNd]aÑm’(â¢Can be ModifiedœÄ°dONLNdla’mÛ)Q:   Yes†ó°ñ°dONLNdtmÑyÆ(ï¢Used by (°dONLNd|mØy)+: LaunchTwitch()†ó°ñ°dONLNdçyÑÖ¬(°¢ Modified by 'İdONLNdôy√ÖÌ)?
  4167. :  Scripts†ó°ñ†ó°ñ°dONLNd•ë`ù´(π~
  4168. gPrevAppTitle†ó°ñ°dONLNdµùÑ©ª+$ Descriptionz@°dONLNd¿ùº©ø)8:†ó°ñ°dONLNd¬©çµ–(—´DThis contains the name of the last application that was running, and†ó°ñ°dONLNdµç¡Õ* Cshould be utilized when twitching back to a previous application is†ó°ñ°dONLNdK¡çÕ‘* Erequired. e.g. Scrapbook tests require twitching back to the previous†ó°ñ°dONLNdëÕçŸ≈* application.†ó°ñ°dONLNdüŸÑÂÕ(¢Possible values'°dONLNdÆŸŒ—)J:†ó°ñ°dONLNd∞ÂçÒ™(
  4169. ´String†ó°ñ°dONLNd∑ÒÑ˝’(¢Can be ModifiedœÄ°dONLNdΔÒ’˝G)Q: Only LaunchTwitch().†ó°ñ°dONLNd›˝Ñ    Æ(%¢Used by (°dONLNdÂ˝Ø    Û)+: Scrapbook(),†ó°ñ°dONLNdÙ    Ñ¬(1¢ Modified by 'İdONLNd    √)?:  LaunchTwitch().†ó°ñ†ó°ñ°dONLNd!`-(I~$gPrintTest - Not currently supported†ó°ñ°dONLNd:-Ñ9æ+$ Description z@°dONLNdF-ø9¬);:†ó°ñ°dONLNdH9åE´(a™=Flag which indicates whether or not print testing will occur.†ó°ñ°dONLNdÜEÑQÕ(m¢Possible values'°dONLNdïEŒQ—)J:†ó°ñ°dONLNdôQñ](y¥Integer - Boolean ( 0 or 1 )†ó°ñ°dONLNd∂]Ñi±(Ö¢    Used by :†ó°ñ°dONLNd¡iÑu≈*
  4170. Modified by :}°dONLNdŒiΔuÌ)B      Scripts†óˇ>◊#ˇ ˇˇˇˇ#◊°ñ 
  4171. _,Times
  4172. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛81†ó°ñ°dONLNd)`5π(Q~gSFPUTLocation†ó°ñ°dONLNd5ÑAæ+$ Description z@°dONLNd5øA¬);:†ó°ñ°dONLNdAåM‚(i™HSF_PutLocation contains the path to the directory in which files will be†ó°ñ°dONLNdgMçY‰+ Ksaved by the task SaveAs(). If the list is empty files will be saved in the†ó°ñ°dONLNd≥Yçe∫* :default directory. Example:  SF_PUTLocation := {"myDisk"};†ó°ñ°dONLNdÓeÑqÕ(ç¢Possible values'°dONLNd˝eŒq—)J:†ó°ñ°dONLNdqç}ü(ô´List†ó°ñ°dONLNd}Ñâ’(•¢Can be ModifiedœÄ°dONLNd}’âÛ)Q:   Yes†ó°ñ°dONLNdâÑï±(±¢    Used by :}İdONLNd&â≤ï‰).
  4173.   SaveAs()†ó°ñ°dONLNd1ïѰ≈(Ω¢
  4174. Modified by :}°dONLNd>ïΔ°Ì)B      Scripts†ó°ñ†ó°ñ°dONLNdI≠`π∑(’~gSFOriginalPath†ó°ñ°dONLNd\πÑ≈ª+$ Descriptionz@°dONLNdgπº≈ø)8:†ó°ñ°dONLNdi≈ç—‹(Ì´HThis contains the path for Standard File before navigation occurs. It is†ó°ñ°dONLNd≤—ç›Á* Fupdated every time navigation occurs in Standard File from SaveAs() or†ó°ñ°dONLNd˘›çÈ¡*
  4175. OpenFile()
  4176. $°dONLNd›¬È«)5. 
  4177. $°dONLNd›«Èœ)6It can be used as a mechanism to navigate back to your†ó°ñ°dONLNd<Èçı„(´original directory.†ó°ñ°dONLNdQıÑÕ(¢Possible values'°dONLNd`ıŒ—)J:†ó°ñ°dONLNdbç
  4178. ü()´List†ó°ñ°dONLNdg
  4179. Ñ’(5¢Can be ModifiedœÄ°dONLNdv
  4180. ’’)Q7:   Normally only by the library routines listed below.†ó°ñ°dONLNdÆÑ%Æ(A¢Used by (°dONLNd∂Ø%.)+: Could be used by scripts.†ó°ñ°dONLNd“%Ñ1¬(M¢ Modified by 'İdONLNdfi%√1)?:  SFNavigate(),†ó°ñ†ó°ñ°dONLNdÒ=dIì(eÇ    gSpectest†ó°ñ°dONLNd˝IÑUª+  Descriptionz@°dONLNdIºUø)8:†ó°ñ°dONLNd
  4181. Uçaº(}´AIndicates whether or not any special tests designated by calls to†ó°ñ°dONLNdMaçmµ* 9DoSpecialTest() will be completed. Note: DoSetUpApp() and†ó°ñ°dONLNdámçyØ* ;DoCloseApp() are the only library tasks which make calls to†ó°ñ°dONLNd√yçÖfi* DoSpecialTest().†ó°ñ°dONLNd’ÖÑëÕ(≠¢Possible values'°dONLNd‰ÖŒë—)J:†ó°ñ°dONLNdÁëñù(π¥Integer - Boolean ( 0 or 1 )†ó°ñ°dONLNdùÑ©’(≈¢Can be ModifiedœÄ°dONLNdù’©Û)Q:   Yes†ó°ñ°dONLNd©ÑµÆ(—¢Used by (°dONLNd#©Øµ÷)+    : Scripts†ó°ñ°dONLNd-µÑ¡¬(›¢ Modified by 'İdONLNd9µ√¡Ì)?
  4182. :  Scripts†ó°ñ†ó°ñ°dONLNdDÕ`Ÿ©(ı~ gTargetCheck†ó°ñ°dONLNdRŸÑª+$ Descriptionz@°dONLNd]ŸºÂø)8:†ó°ñ°dONLNd_ÂçÒí(
  4183. ´6Most output is funneled through a single task LogStr()
  4184. ≈¿°dONLNdïÂíÒó(
  4185. ∞. 
  4186. ≈¿°dONLNdóÂóÒ’)
  4187. LogStr() will†ó°ñ°dONLNd•Òç˝±(´>append the name of the target application to any output if the†ó°ñ°dONLNd‰˝ç    Ù* gTargetCheck is true.†ó°ñ°dONLNd˚    ÑÕ(1¢Possible values'°dONLNd
  4188.     Œ—)J:†ó°ñ°dONLNd ç!
  4189. (=´Integer - Boolean ( 0 or 1 )†ó°ñ°dONLNd*!Ñ-’(I¢Can be ModifiedœÄ°dONLNd9!’-Ì)Q: Yes†ó°ñ°dONLNd@-Ñ9Æ(U¢Used by (°dONLNdH-Ø9fi)+
  4190. : LogStr()†ó°ñ°dONLNdT9ÑE¬(a¢ Modified by 'İdONLNd`9√Ek)?%: Scripts prior to or during runtime.†ó°ñ†óˇ .◊#ˇ ˇˇˇˇ#◊°ñ 
  4191. _,Times
  4192. .ˇ°dONLNdˇˇ(⁄Z82°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)`5ç(Q~gTextStr†ó°ñ°dONLNd
  4193. 5ÑAæ+$ Description z@°dONLNd5øA¬);:†ó°ñ°dONLNdAåMµ(i™>A text string used when typing in the Font and Draw libraries.†ó°ñ°dONLNdWMÑYÕ(u¢Possible values'°dONLNdfMŒY—)J:†ó°ñ°dONLNdjYçe™(Å´String†ó°ñ°dONLNdqeÑq’(ç¢Can be ModifiedœÄ°dONLNdÄe’qÌ)Q: Yes†ó°ñ°dONLNdÜqÑ}±(ô¢    Used by :}İdONLNdèq≤}S).!  CheckSetup(), DoText(), Scripts†ó°ñ°dONLNd±}Ñâ≈(•¢
  4194. Modified by :}°dONLNdæ}Δâ.)B InitGlobals(), Scripts†ó°ñ†ó°ñ°dONLNd⁄ï`°¥(Ω~
  4195. gDoWindowList†ó°ñ°dONLNdȰÑ≠æ+$ Description z@°dONLNdı°ø≠¬);:†ó°ñ°dONLNd˜≠åπÁ(’™KThis is a list of flags indicating which window tests are appropriate for a†ó°ñ°dONLNdCπç≈‡+ Igiven aplication. By setting each element to 1 or 0 the script writer can†ó°ñ°dONLNdç≈ç—È* Gspecify whether a certain type of window testing will be performed from†ó°ñ°dONLNd’—ç›”* Cthe task DoWindows() for a given application. Redefine this in your†ó°ñ°dONLNd›çÈ›* Happlication script if your application cannot do all of the window tests†ó°ñ°dONLNdbÈçıfl* Ispecified below,  e.g. if VU can't recognize the scroll bars, in your app†ó°ñ°dONLNd¨ıç}* 0script define global gDoWindowList := {1,0,1,1};
  4196. º°dONLNd‹ı}Ç). 
  4197. º°dONLNdfiıÇœ)(See example in†ó°ñ°dONLNdÓç
  4198. √()´
  4199. Canvas.vu)†ó°ñ°dONLNd˙
  4200. ®+ First element - Sizing.†ó°ñ°dONLNd®%-* Second element - Scrolling.†ó°ñ°dONLNd0%®1%* Third element - Dragging.†ó°ñ°dONLNdK1®=)* Fourth element - Zooming.†ó°ñ°dONLNde=ÑIÕ(e¢Possible values'°dONLNdt=ŒI—)J:†ó°ñ°dONLNdxIñU6(q¥#List of  Boolean integers( 0 or 1 )†ó°ñ°dONLNdúUÑa’(}¢Can be ModifiedœÄ°dONLNd´U’aÛ)Q:   Yes†ó°ñ°dONLNd≥aÑm±(⢠   Used by :}İdONLNdºa≤mH).  DoWindows(), TestWindow()†ó°ñ°dONLNdÿmÑy≈(ï¢
  4201. Modified by :}°dONLNdÂmΔyÍ)B Scripts†ó°ñ†óˇ‰◊#ˇ ˇˇˇˇ#◊°ñ 
  4202. _,Times
  4203. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛83†ó°ñ,     Helvetica°dONLNd/`=-(X~#Task Reference (Related to Globals)†ó°ñ°dONLNd%<`Hå* gExitVU†ó°ñ°dONLNd.HÑTæ+$ Description z@°dONLNd:HøT¬);:†ó°ñ°dONLNd<Tå`Q(|™)This task makes the built in VU task Exit
  4204. uİdONLNdeTR`W)Δ. 
  4205. uİdONLNdgTW`fi)The purpose of defining this†ó°ñ°dONLNdÑ`çl¿(à´Bas a task is so we can use a task  reference to this task- gExitVU
  4206. ¿°dONLNdΔ`¡lΔ(àfl. 
  4207. ¿°dONLNd»`Δl€)This†ó°ñ°dONLNdÕlçx¬(î´@way we can default  our Exception Handling task to call the task†ó°ñ°dONLNdxçÑ·* Hreference gExitVU and thus exit. If others do not want to exit, they can†ó°ñ°dONLNdWÑçêö* :redefine the task reference to what ever task they prefer.†ó°ñ°dONLNdíêÑúÕ(∏¢Possible values'°dONLNd°êŒú—)J:†ó°ñ°dONLNd§úç®”(ƒ´Task reference†ó°ñ°dONLNd≥®Ñ¥’(–¢Can be ModifiedœÄ°dONLNd¬®’¥Û)Q:   Yes†ó°ñ°dONLNd ¥Ñ¿±(‹¢    Used by :}İdONLNd”¥≤¿).
  4208.   Globals.Lib†ó°ñ°dONLNd·¿ÑÃ≈(Ë¢
  4209. Modified by :}°dONLNdÓ¿ΔÃ¥)B1 Must be defined in Custom.Lib for overwriting it†ó°ñ†ó°ñ°dONLNd fi`ÏÕ(~Launching/Quitting†ó°ñ°dONLNd4Î`˜º* gBackgroundQuit†ó°ñ°dONLNdE˜Ñæ+$ Description z@°dONLNdQ˜ø¬);:†ó°ñ°dONLNdSå⁄(+™BFlag indicating whether or not to use the BackgroundQuit mechanism
  4210. gİdONLNd(+˘.†ó°ñ
  4211. °dONLNdóç—(7´AThe background quit mechanism means that the task Quit() will not†ó°ñ°dONLNdŸç'Ω* Dactually quit the current application, rather it will close all open†ó°ñ°dONLNd'ç3∏* windows
  4212. ”¿°dONLNd%'∏3Ω)+. 
  4213. ”¿°dONLNd''Ω3»)5When the task launchTwitch() attempts to launch a new†ó°ñ°dONLNd]3ç?fl([´Fapplication a dialog will appear prompting background quitting to free†ó°ñ°dONLNd§?çK
  4214. * enough memory to launch
  4215. "@°dONLNdª? K)~. 
  4216. "@°dONLNdΩ?K‘)&If gBackgroundQuit is enabled the “OK”†ó°ñ°dONLNd‰KçW„(s´Ibutton will be selected, otherwise, the “Cancel” button will be selected.†ó°ñ°dONLNd.WÑcÕ(¢Possible values'°dONLNd=WŒc—)J:†ó°ñ°dONLNdAcño(ã¥Integer - Boolean ( 0 or 1 )†ó°ñ°dONLNd^oÑ{’(ó¢Can be ModifiedœÄ°dONLNdmo’{Û)Q:   Yes†ó°ñ°dONLNdu{Ñá±(£¢    Used by :}İdONLNd~{≤áë).,  Quit(), QuitBackgroundApps(), TwitchQuit()†ó°ñ°dONLNd´áÑì≈(Ø¢
  4217. Modified by :}°dONLNd∏áΔìî)B' Scrapbook(), LaunchFillMemApp, Scripts†ó°ñ†ó°ñ°dONLNd·ü`´£(«~ gFillMemory†ó°ñ°dONLNdÓ´Ñ∑æ+$ Description z@°dONLNd˙´ø∑¬);:†ó°ñ°dONLNd¸∑å√ƒ(fl™>Flag indicating whether or not to use the FillMemory mechanism
  4218. j¿°dONLNd:∑≈√ (fl„. 
  4219. j¿°dONLNd<∑ √‹)The†ó°ñ°dONLNd@√眉(δCFillMemory mechanism means that the task Launchtwitch() will launch†ó°ñ°dONLNdќ瀉* Aanother application <global gFillMemApp> (see gFillMemApp  below)†ó°ñ°dONLNd«€çÁõ* :after it has successfully launched the desired application
  4220. µ@°dONLNd€õÁ†(π. 
  4221. µ@°dONLNd€†ÁÈ)Quit() will also†ó°ñ°dONLNdÁçÛN(´%quit the <gFillMemApp> when quitting.†ó°ñ°dONLNd:ÛÑˇÕ(¢Possible values'°dONLNdIÛŒˇ—)J:†ó°ñ°dONLNdMˇñ ('¥Integer - Boolean ( 0 or 1 )†ó°ñ°dONLNdj Ñ’(3¢Can be ModifiedœÄ°dONLNdy ’Û)Q:   Yes†ó°ñ°dONLNdÅÑ#±(?¢    Used by :}İdONLNdä≤#)).  Quit(), LaunchTwitch()†ó°ñ°dONLNd£#Ñ/≈(K¢
  4222. Modified by :}°dONLNd∞#Δ/·)B7 Scrapbook(), TwitchQuit(), LaunchFillMemApp(), Scripts†ó°ñ†óˇ◊#ˇ ˇˇˇˇ#◊°ñ 
  4223. _,Times
  4224. .ˇ°dONLNdˇˇ(⁄Z84°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)`5ß(Q~ gFillMemApp†ó°ñ°dONLNd 5ÑAæ+$ Description z@°dONLNd5øA¬);:†ó°ñ°dONLNdAåMÃ(i™DThe name of the application that is to be used to fill memory in the†ó°ñ°dONLNd_MçY}+ ,FillMemory mechanism (see gFillMemory above)
  4225. İdONLNdãM~YÉ)Ò. 
  4226. İdONLNdçMÉYÂ)Set this application's†ó°ñ°dONLNd§Yçe·(Å´Dmemory allocation high enough to use up all additional memory on the†ó°ñ°dONLNdÈeçq¡* Ctarget machines, place it's alias in the Apple menu or in the alias†ó°ñ°dONLNd-qç}ª*
  4227. directory.†ó°ñ°dONLNd8}ÑâÕ(•¢Possible values'°dONLNdG}Œâ—)J:†ó°ñ°dONLNdKâñï(±¥Integer - Boolean ( 0 or 1 )†ó°ñ°dONLNdhïѰ’(Ω¢Can be ModifiedœÄ°dONLNdwï’°Û)Q:   Yes†ó°ñ°dONLNd°Ñ≠±(…¢    Used by :}İdONLNdà°≤≠E).  Quit(), LaunchFillMemApp()†ó°ñ°dONLNd•≠Ñπ≈(’¢
  4228. Modified by :}°dONLNd≤≠ΔπÍ)B Scripts†ó°ñ†ó°ñ°dONLNdæ≈`—ö(Ì~
  4229. gForceQuit†ó°ñ°dONLNd —Ñ›æ+$ Description z@°dONLNd÷—ø›¬);:†ó°ñ°dONLNdÿ›åȪ(™=Flag indicating whether or not to use the ForceQuit mechanism
  4230. @°dONLNd›ºÈ¡(⁄. 
  4231. @°dONLNd›¡È”)The†ó°ñ°dONLNdÈçıÍ(´HForceQuit mechanism means that the task Quit() will not quit the current†ó°ñ°dONLNddıç(* !application. It won't do anything
  4232. J¿°dONLNdÖı).)ú. 
  4233. J¿°dONLNdáı.Î)%When the task launchTwitch() attempts†ó°ñ°dONLNd≠ç
  4234. fl()´Jto launch a new application, if a dialog appears stating that there is not†ó°ñ°dONLNd¯
  4235. ç«* ?enough memory to launch, Launchtwitch() will twitch to and quit†ó°ñ°dONLNd8ç%Õ* Eapplications until it can successfully launch the desired applicaton.†ó°ñ°dONLNd~%Ñ1Õ(M¢Possible values'°dONLNdç%Œ1—)J:†ó°ñ°dONLNdë1ñ=(Y¥Integer - Boolean ( 0 or 1 )†ó°ñ°dONLNdÆ=ÑI’(e¢Can be ModifiedœÄ°dONLNdΩ=’IÛ)Q:   Yes†ó°ñ°dONLNd≈IÑU±(q¢    Used by :}İdONLNdŒI≤Ui).&  Quit(), TwitchQuit(), LaunchAssist()†ó°ñ°dONLNdıUÑa≈(}¢
  4236. Modified by :}°dONLNdUΔa·)B7 Scrapbook(), LaunchFillMemApp(), TwitchQuit(), Scripts†ó°ñ†ó°ñ,     Helvetica°dONLNd={`â€(§~Scrapbook Constants†ó°ñ°dONLNdRà`îfl* QThe following constants are provided so that scripts can have access to different†ó°ñ°dONLNd§î`†‡* Ptypes of data without relying on hardcoding the position in which they appear in†ó°ñ°dONLNdı†`¨Ò* the Scrapbook into each script
  4237. «°dONLNd†Ò¨ˆ)ë. 
  4238. «°dONLNd†ˆ¨„)5It is appropriate to set these global variables prior†ó°ñ°dONLNdK¨`∏ƒ(‘~Oto execution so that they reflect the appropriate positions, they are static at†ó°ñ°dONLNdõ∏`ƒà* runtime.†ó°ñ†ó°ñ°dONLNd•–a‹¶+
  4239. kScrapTEXT◊°dONLNdØ–¶‹©)E °dONLNd±–‹)J:= 1;°dONLNd∑–8‹õ)H# Test is 1st position†ó°ñ°dONLNdŒ‹aË¢(
  4240. kScrapPICT‘@°dONLNdÿ‹¢Ë•)A °dONLNd⁄‹Ë)N:= 2;°dONLNd‡‹8˧)H# PICT is 2nd position†ó°ñ†ó°ñ†óˇí◊#ˇ ˇˇˇˇ#◊°ñ 
  4241. _,Times
  4242. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛85†ó°ñ,     Helvetica
  4243. °dONLNd/<>Î(YZControlling The Test Level†ó°ñ
  4244. °dONLNd=<Iü* LControl to the test level is provided by the script parameter “ScriptLevel”,†ó°ñ†ó°ñ,    Monaco
  4245.     °dONLNdjUÑ`b+H%Script MacDrawPro (ScriptLevel := -1)†ó°ñ†ó°ñ
  4246. °dONLNdêl<xÃ(îZwhich can be defined as a list.†ó°ñ†ó°ñ°dONLNd±ÑÑêÆ+HB{ level, {  {'method', method level, times to be performed  } },..†ó°ñ†ó°ñ°dONLNdÙú<®ÿ(ƒZYThe first element of the list controls the amount or level of testing to be performed for†ó°ñ°dONLNdO®<¥‹* U'Draw', 'Window', 'Font' and 'AppTestLevel'. The possible values that each method can†ó°ñ°dONLNd•¥<¿g*     have are:†ó°ñ†ó°ñ°dONLNdØÃ<ÿ*-1 - undefined†ó°ñ°dONLNdæÿ<‰j* A 0 - no test to perform, unless a custom test method is specified†ó°ñ°dONLNd‰<ª*  1 - least amount of testing†ó°ñ°dONLNd<¸Õ*  2 - medium amount of testing†ó°ñ°dONLNd;¸<Ω*  3 - most amount of tetsing†ó°ñ†ó°ñ°dONLNdW< ‰*]The second element of the list is optional and can be defined as a list of lists, specifiying†ó°ñ°dONLNdµ <,«* Pone or more methods to test in a customized manner. You can specify not only the†ó°ñ°dONLNd,<8«* Rmethod and the level for that method, but also the number of times to perform that†ó°ñ°dONLNdY8<Db* method.†ó°ñ†ó°ñ°dONLNdaP<\m*?This convention can be illustrated with the following examples:†ó°ñ†ó°ñ
  4247.     °dONLNd°h<sΔ*Script MacDrawPro ( {3}°dONLNd∏iΔt»)ä ¿°dONLNdπh»sŒ))†ó°ñ†ó°ñ°dONLNdΩ~Nâ§(¶l9# perform the most amount of testing for all four methods†ó°ñ†ó°ñ°dONLNd˜ï<†J(ΩZ-Script MacDrawPro ( {0, { { {'Draw', {3}}} })†ó°ñ†ó°ñ°dONLNd'´N∂Ú+F# Custom control, only perform the Draw method test at the most level.†ó°ñ†ó°ñ°dONLNdn¬<Õb(ÍZ1Script MacDrawPro ({ 2, { { {'Draw', {3, 3}}} } )†ó°ñ†ó°ñ°dONLNd¢ÿI„ˇ+
  4248. I# Custom control, perform medium test for 'Window', 'Font. In addition,  †ó°ñ°dONLNdÌ„`Ó™+ 7perform the Draw method at the most level, three times.†ó°ñ†ó°ñ°dONLNd%˙<¬("ZAScript MacDrawPro ( {3, {  {'Font',{3,5}}, {'Window',{2,4}} } } )†ó°ñ†ó°ñ°dONLNdjI+
  4249. J# Custom control, perform most test. In addition,  perform Font method at †ó°ñ°dONLNdµ`&
  4250. + Gthe most level, five times. And the Window method at medium level, four†ó°ñ°dONLNd˛&`1Ñ* times.†ó°ñ†ó°ñ
  4251. °dONLNdC<Q¿(lZTest Method Constants†ó°ñ°dONLNdP<\‹* ZThe following set of constants allow a script writer to set the behavior of several of the†ó°ñ°dONLNdw\<h&* /high level test methods e.g. DoDraw(), DoText()
  4252. º¿°dONLNd¶\&h+)Í. 
  4253. º¿°dONLNd®\+hÁ)'If a parameter has been passed into any†ó°ñ°dONLNd–h<tŸ(êZ#of these tasks, the constants will ¿°dONLNdÛh⁄tÍ)ûnot»¿°dONLNdˆhÍtY) override the parameter
  4254. `@°dONLNd
  4255. hZt_)p. 
  4256. `@°dONLNdh_t‹)The SPEC S&L scripts do†ó°ñ°dONLNd't<Äfi(úZYnot pass parameters to these tasks, but utilize these constants when determining the test†ó°ñ°dONLNdÅÄ<åb* method.†ó°ñ†óˇ§◊#ˇ ˇˇˇˇ#◊°ñ 
  4257. _,Times
  4258. .ˇ°dONLNdˇˇ(⁄Z86°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)`5û(Q~
  4259. gDrawLevel†ó°ñ†ó°ñ°dONLNdAÑMÛ+$Can be defined as a list†ó°ñ°dONLNd,MÑY–* Possible values:†ó°ñ°dONLNd=Yçe,+     "0  - indicates that DoDraw() will @°dONLNd_Y-e=)†not¬@°dONLNdbY=eª) perform any draw testing.†ó°ñ°dONLNd}eçq™(ç´<1  -indicates that DoDraw() will create a random object for @°dONLNdπe´qº(ç…oneİdONLNdºeΩq€) of the†ó°ñ°dONLNdƒqü}Â(ôΩFtools defined within gToolList within a particular script (see section†ó°ñ°dONLNd }üâ∫* titled )İdONLNd}ªâ7)Using the Draw Libraries|İdONLNd*}7âè)| for more details) .†ó°ñ°dONLNd?âçï™(±´<2  -indicates that DoDraw() will create a random object for @°dONLNd{â´ï∑(±…allÆ@°dONLNd~â∑ï’)  of the†ó°ñ°dONLNdÜïü°Â(ΩΩFtools defined within gToolList within a particular script (see section†ó°ñ°dONLNdÕ°ü≠∫* titled )İdONLNd‘°ª≠7)Using the Draw Libraries|İdONLNdϰ7≠è)| for more details) .†ó°ñ†ó°ñ°dONLNdπ`≈≠(·~ gWindowLevel‘@°dONLNdπ≠≈∞)M †ó°ñ°dONLNd≈Ñ—–(Ì¢Possible values:†ó°ñ°dONLNd)—ç›;+     $0  - indicates that DoWindow() will ≈¿°dONLNdM—;›K)Ænoto¿°dONLNdP—L›Œ) perform any window tests.†ó°ñ°dONLNdk›çÈj(´-1  -indicates that DoWindow() will perform a Ω°dONLNdò›jÈç)›limitedπ@°dONLNdü›éÈ‘)$ set of window†ó°ñ°dONLNdÆÈüı∑(Ωtests.†ó°ñ°dONLNdµıçj(´-2  -indicates that DoWindow() will perform a Ω°dONLNd‚ıjó)›completeµ@°dONLNdÍıòfi). set of window†ó°ñ°dONLNd˘ü
  4260. ∑()Ωtests.†ó°ñ†ó°ñ°dONLNd`%ô(A~
  4261. gFontLevel†ó°ñ°dONLNd%Ñ1–+$ Possible values:†ó°ñ°dONLNd!1ç='+     "0  - indicates that DoText() will pİdONLNdC1(=8)õnotİdONLNdF19=®) perform any font tests.†ó°ñ°dONLNd_=çIV(e´+1  -indicates that DoText() will perform a g¿°dONLNdä=WI) random°dONLNdê=ÄIŒ)) set of font tests 
  4262. ¿°dONLNd£=œI‡)Oone†ó°ñ°dONLNdßIüU–(qΩAof the fonts defined in gFontList (see section Exercising Fonts).†ó°ñ°dONLNdÈUçaV(}´+2  -indicates that DoText() will perform a g¿°dONLNdUWa) random°dONLNdUÄa‹)) set of font tests for†ó°ñ°dONLNd1aüm∂(âΩeach“¿°dONLNd5a∂m«): font defined in gFontList (see section Exercising Fonts).†ó°ñ°dONLNdpmçyV(ï´+3  -indicates that DoText() will perform a g¿°dONLNdõmWyÑ)     waterfall`°dONLNd§mÖy›). set of font test for†ó°ñ°dONLNd∫yüÖÀ(°Ω?each font defined in gFontLists (see section Exercising Fonts).†ó°ñ†ó°ñ°dONLNd˝ë`ù›(π~gNumRandomFontTestsz°dONLNdëfiù˜)~ := 1;†ó°ñ°dONLNdùÑ©–(≈¢Possible values:†ó°ñ°dONLNd)©çµ€+     Ginteger  - indicates number of random font tests that will be generated†ó°ñ°dONLNdqµ∫¡l+- #from gFontMethod := 3; (see above).†ó°ñ†óˇ,◊#ˇ ˇˇˇˇ#◊°ñ 
  4263. _,Times
  4264. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛87†ó°ñ,     Helvetica
  4265. °dONLNd/<>(YZ Initialized In The Initdraw Task†ó°ñ°dONLNd!=<Lx*    Task name
  4266. °dONLNd+@ÑLæ)H - InitDraw()†ó°ñ
  4267. °dONLNd8L<[m(wZLocation
  4268. °dONLNdAOÑ[π)H
  4269. - Draw.Lib†ó°ñ
  4270. °dONLNdL[<jm(ÜZ
  4271. Initialize
  4272. °dONLNdW^Ñj#)H"- Must be initialized from within tİdONLNdy^$jH)†scripts pİdONLNdÅ^Ij√)%prior to making any calls.†ó°ñ†ó°ñ°dONLNdú|`äR(•~*Misc. Draw Related Script Global variables†ó°ñ°dONLNd«â`ïÂ* RThe following global variables(constants) are default values and if an application†ó°ñ°dONLNdï`°ë* @needs to override them it should be done from within the script.†ó°ñ†ó°ñ°dONLNd_≠`πØ*
  4273. gBoundingRect†ó°ñ°dONLNdqπÑ≈ª+$ Descriptionz@°dONLNd|πº≈¬)8 :†ó°ñ°dONLNdÄ≈ç—¬(Ì´>Rectangle in which points will be generated for random drawing
  4274.  @°dONLNdæ≈√—»(Ì·. 
  4275.  @°dONLNd¿≈»—‰)If this†ó°ñ°dONLNd»—盥(˘´=is not defined the rectangle of the document window (less the†ó°ñ°dONLNd›çÈ* gWindowInset) will be used.†ó°ñ°dONLNd$ÈÑıÕ(¢Possible values'°dONLNd3ÈŒı—)J:†ó°ñ°dONLNd7ıçü(´List†ó°ñ°dONLNd<Ñ
  4276. ’()¢Can be ModifiedœÄ°dONLNdK’
  4277. Û)Q:   Yes†ó°ñ°dONLNdS
  4278. ѱ(5¢    Used by :}İdONLNd\
  4279. ≤). MakePointList()†ó°ñ°dONLNdmÑ%≈(A¢
  4280. Modified by :}°dONLNdzΔ%4)B DoWPTools(), Scripts†ó°ñ†ó°ñ°dONLNdí1`=•(Y~ gDrawObject†ó°ñ°dONLNd¶=ÑIæ+$ Description z@°dONLNd≤=øI¬);:†ó°ñ°dONLNdµIçU (q´?We generate TCS records for many of the actions that occur when†ó°ñ°dONLNdıUça#* calling the SPEC S&L libraries
  4281. "°dONLNdU$a))ó. 
  4282. "°dONLNdU)aª)Since multiple TCS's are often†ó°ñ°dONLNd4açmÊ(â´Igenerated when performing a single action it is important to tie multiple†ó°ñ°dONLNd~mçyÛ* TCS records together
  4283. ¿°dONLNdímÙy˘)g. 
  4284. ¿°dONLNdîm˘yÕ)+gDrawObject is used to tie together the TCS†ó°ñ°dONLNd¿yçÖ (°´@records that are generated when drawing an object using the Draw†ó°ñ°dONLNdÖçë∏*     Libraries
  4285. Õ¿°dONLNd
  4286. Ö∏ëΩ)+. 
  4287. Õ¿°dONLNd ÖΩë·)>This is initialized in InitControlGlobals() and incremented in†ó°ñ°dONLNdKëçù(π´DrawObject() in 'Draw.Lib'
  4288. ¿°dONLNdeëù)Ö. 
  4289. ¿°dONLNdgëù„)+Script writers should not change this value†ó°ñ°dONLNdìùç©Ω(≈´ explicitly.†ó°ñ°dONLNdü©ÑµÕ(—¢Possible values'°dONLNdÆ©Œµ—)J:†ó°ñ°dONLNd≤µç¡Æ(›´Integer†ó°ñ°dONLNdª¡ÑÕ’(È¢Can be ModifiedœÄ°dONLNd ¡’ÕM)Q:   Only by DrawObject()†ó°ñ°dONLNd„ÕÑŸ±(ı¢    Used by :}İdONLNdÏÕ≤Ÿ¸). SetAttributes()†ó°ñ°dONLNdˇŸÑÂ≈(¢
  4290. Modified by :}°dONLNd ŸΔÂ )B
  4291.  DrawObject()†óˇÙ◊#ˇ ˇˇˇˇ#◊°ñ 
  4292. _,Times
  4293. .ˇ°dONLNdˇˇ(⁄Z88°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)`5ß(Q~ gLineWeights†ó°ñ°dONLNd5ÑAæ+$ Description z@°dONLNd5øA¬);:†ó°ñ°dONLNdAçM›(i´JIf an application utilizes menus instead of a palette to set line weights,†ó°ñ°dONLNdhMçYÊ* Hthis list should be defined as the names of the menuItems which are line†ó°ñ°dONLNd±Yçe≤* weights
  4294. ”°dONLNd∏Y≤e∑)%. 
  4295. ”°dONLNd∫Y∑eW)$This list will only be accessed if  q°dONLNdfiYXeÖ)°gSetLineƒ@°dONLNdÊYÖeØ)-  is set to m¿°dONLNdÒY∞e…)+Task†ó°ñ°dONLNdˆeçq˘(ç´SetLineMenuItems() s¿°dONLNd    e˙q_)m(see gSetLine above)
  4296. ª@°dONLNde_qd)e. 
  4297. ª@°dONLNdedq€)It should be redefined by†ó°ñ°dONLNd9qç}Δ(ô´Dindividual scripts if necessary, not altered in InitControlGlobals()
  4298. c°dONLNd}q«}Ã(ôÂ. 
  4299. c°dONLNdqÃ}È) Note:†ó°ñ°dONLNdá}çâ‰(•´GThe task SetLineMenuItems() has been provided in the libraries since it†ó°ñ°dONLNdœâçïK* 'is a common task override to SetLine().†ó°ñ°dONLNd˜ïѰÕ(Ω¢Possible values'°dONLNd—)J:†ó°ñ°dONLNd
  4300. °ç≠ü(…´List†ó°ñ°dONLNd≠Ñπ’(’¢Can be ModifiedœÄ°dONLNd≠’πÛ)Q:   Yes†ó°ñ°dONLNd&πÑ≈±(·¢    Used by :}İdONLNd/π≤≈). SetLineMenuItems()†ó°ñ°dONLNdC≈Ñ—¬(Ì¢ Modified by 'İdONLNdO≈√—Ì)?
  4301. :  Scripts†ó°ñ†ó°ñ°dONLNd\›iÈ®(á
  4302. gNumPoints†ó°ñ°dONLNdgÈÑıæ+ Description z@°dONLNdsÈøı¬);:†ó°ñ°dONLNdvıç…(´BMany of the tools available, defined in the Draw Libraries require†ó°ñ°dONLNdπç
  4303. Z* *numerous points to generate a given object
  4304. mİdONLNd„[
  4305. `)Œ. 
  4306. mİdONLNdÂ`
  4307. È)This indicates the number of†ó°ñ°dONLNd
  4308. çU(5´+points to generate for any multipoint tool.†ó°ñ°dONLNd.Ñ%Õ(A¢Possible values'°dONLNd=Œ%—)J:†ó°ñ°dONLNdA%ç1ˆ(M´Integer greater than 2.†ó°ñ°dONLNdY1Ñ=’(Y¢Can be ModifiedœÄ°dONLNdh1’=Û)Q:   Yes†ó°ñ°dONLNdp=ÑI±(e¢    Used by :}İdONLNdy=≤I¯). SetPointList()†ó°ñ°dONLNdâIÑU¬(q¢ Modified by 'İdONLNdïI√UÌ)?
  4309. :  Scripts†ó°ñ†ó°ñ°dONLNd°a`m°(â~ gScreenInset†ó°ñ°dONLNdÆmÑyæ+$ Description z@°dONLNd∫møy¬);:†ó°ñ°dONLNdΩyçÖq(°´0Inset into the screen region of the main monitor
  4310. @°dONLNdÌyrÖw)Â. 
  4311. @°dONLNdÔywÖÂ)Applications will often†ó°ñ°dONLNdÖçë›(≠´Jcreate regions which are not accessible, e.g. it is not possible to drag a†ó°ñ°dONLNdRëçùA* "window where the menubar is drawn.†ó°ñ°dONLNduùÑ©Õ(≈¢Possible values'°dONLNdÑùŒ©Ê)J: List†ó°ñ°dONLNdã©Ñµ’(—¢Can be ModifiedœÄ°dONLNdö©’µÛ)Q:   Yes†ó°ñ°dONLNd¢µÑ¡±(›¢    Used by :}İdONLNd´µ≤¡ı).:TestWindow(), WindowFunction(), DragWindow(), SizeWindow()†ó°ñ°dONLNdÊ¡ÑÕ¬(È¢ Modified by 'İdONLNdÚ¡√ÕÌ)?
  4312. :  Scripts†ó°ñ†ó°ñ°dONLNdŸ`Âï(~    gVoidRect†ó°ñ°dONLNd
  4313. ÂÑÒæ+$ Description z@°dONLNdÂøÒ¬);:†ó°ñ°dONLNdÒç˝"(´Rectangle in which points will "@°dONLNd8Ò#˝3)ñnotÃ@°dONLNd;Ò3˝’)  be generated for random drawing
  4314. ∂@°dONLNd[Ò÷˝€)£. 
  4315. ∂@°dONLNd]Ò€˝‚)If†ó°ñ°dONLNd`˝ç    ¥(%´Athis is not points will be generated in this rectangle within the†ó°ñ°dONLNd¢    ç* applications window
  4316. $@°dONLNdµ    Òˆ)d. 
  4317. $@°dONLNd∑    ˆÂ)3This rect should be defined in coordinates that are†ó°ñ°dONLNdÎç!Õ(=´Crelative to the top left corner of the applications document window
  4318.  °dONLNd.Œ!–(=Ï.†ó°ñ
  4319. °dONLNd2!Ñ-Õ(I¢Possible values'°dONLNdA!Œ-—)J:†ó°ñ°dONLNdE-ç9ü(U´List†ó°ñ°dONLNdJ9ÑE’(a¢Can be ModifiedœÄ°dONLNdY9’EÛ)Q:   Yes†ó°ñ°dONLNdaEÑQ±(m¢    Used by :}İdONLNdjE≤Q). MakePointList()†ó°ñ°dONLNd{QÑ]¬(y¢ Modified by 'İdONLNdáQ√]Ì)?
  4320. :  Scripts†óˇ∞◊#ˇ ˇˇˇˇ#◊°ñ 
  4321. _,Times
  4322. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛89†ó°ñ°dONLNd)`5™(Q~ gWindowInset†ó°ñ°dONLNd
  4323. 5ÑAæ+$ Description z@°dONLNd5øA¬);:†ó°ñ°dONLNdAçMé(i´4Inset into the content region of the document window
  4324. ¡Ä°dONLNdPAéMì(i¨. 
  4325. ¡Ä°dONLNdRAìM€)It is not always†ó°ñ°dONLNdcMçY≤(u´<possible to have access to all portions of a document window
  4326. h¿°dONLNdüM≥Y∏(u—. 
  4327. h¿°dONLNd°M∏Y»)For†ó°ñ°dONLNd•Yçeº(Å´Cexample,  it is not possible to draw in the scroll bar section of a†ó°ñ°dONLNdÈeçqË* document window.†ó°ñ°dONLNd˚qÑ}Õ(ô¢Possible values'°dONLNd
  4328. qŒ}Ê)J: List†ó°ñ°dONLNd}Ñâ’(•¢Can be ModifiedœÄ°dONLNd }’âÛ)Q:   Yes†ó°ñ°dONLNd(âÑï±(±¢    Used by :}İdONLNd1â≤ï
  4329. ). MakePointList() .†ó°ñ°dONLNdDïѰ¬(Ω¢ Modified by 'İdONLNdPï√°Ì)?
  4330. :  Scripts†ó°ñ†ó°ñ†ó°ñ,     Helvetica°dONLNd[ø`Õ(Ë~Task References  (Draw Related)†ó°ñ°dONLNd{Ã`ÿ◊* PThe follow set of task references define which default library tasks are used to†ó°ñ°dONLNdÃÿ`‰Í* perform certain functionality
  4331. @°dONLNdÈÿΉ)ã. 
  4332. @°dONLNdÎÿ‰ )0If there is a need to override any of these task†ó°ñ°dONLNd‰`‚( ~Rreferences, all overriding should occur in the script where overriding is necessay
  4333. ˘¿°dONLNdn‰‚‰( .†ó°ñ
  4334. °dONLNdp`¸Ã(~IMany of the  SPEC S&L scripts depend upon the default settings to execute†ó°ñ°dONLNd∫¸`à* properly
  4335. %İdONLNd¬¸âé)). 
  4336. %İdONLNdƒ¸éÍ)HTask references are not supported in Virtual User 1.x,  thus depend upon†ó°ñ°dONLNd
  4337. `∂(0~Virtual User 2.0x.†ó°ñ†ó°ñ°dONLNd  `,ì*    gSetColor–@°dONLNd) ì,ñ)3 °dONLNd+ ®,˝):= Task SetColor;†ó°ñ°dONLNd>,Ñ8ª(T¢ Descriptionz@°dONLNdI,º8ø)8:†ó°ñ°dONLNdL8çD‚(`´IIndicates the task that will be called to set colors when drawing objects†ó°ñ°dONLNdñDçPÒ* using the Draw.Libs.†ó°ñ°dONLNd¨PÑ\Õ(x¢Possible values'°dONLNdªPŒ\—)J:†ó°ñ°dONLNdΩ\çh”(Ñ´Task reference†ó°ñ°dONLNdÃhÑt’(ê¢Can be ModifiedœÄ°dONLNd€h’tÛ)Q:   Yes†ó°ñ°dONLNd‰tÑÄÆ(ú¢Used by (°dONLNdÏtØġ)+: SetAttributes().†ó°ñ°dONLNdÄÑå¬(®¢ Modified by 'İdONLNd Ä√åÌ)?
  4338. :  Scripts†ó°ñ†ó°ñ°dONLNdò`§ç(¿~gSetLine”@°dONLNdòç§ê)- °dONLNd!ò®§¯):= Task SetLine;†ó°ñ°dONLNd3§Ñ∞ª(â Descriptionz@°dONLNd>§º∞ø)8:†ó°ñ°dONLNdA∞çº⁄(ÿ´GIndicates the task that will be called to set line weights when drawing†ó°ñ°dONLNdâºç»* objects using the Draw.Libs.†ó°ñ°dONLNd߻ёÕ(¢Possible values'°dONLNd∂»Œ‘—)J:†ó°ñ°dONLNd∏‘燔(¸´Task reference†ó°ñ°dONLNd«‡ÑÏ’(¢Can be ModifiedœÄ°dONLNd÷‡’ÏÛ)Q:   Yes†ó°ñ°dONLNdflÏѯÆ(¢Used by (°dONLNdÁÏØ¯ˇ)+: SetAttributes().†ó°ñ°dONLNd˙¯Ñ¬( ¢ Modified by 'İdONLNd¯√Ì)?
  4339. :  Scripts†ó°ñ†ó°ñ°dONLNd`ú(8~ gSetPattern!@°dONLNdù¸)= := Task SetPattern;†ó°ñ°dONLNd4Ñ(ª(D¢ Descriptionz@°dONLNd?º(ø)8:†ó°ñ°dONLNdB(ç4Í(P´KIndicates the task that will be called to set patterns when drawing objects†ó°ñ°dONLNdé4ç@Ò* using the Draw.Libs.†ó°ñ°dONLNd§@ÑLÕ(h¢Possible values'°dONLNd≥@ŒL—)J:†ó°ñ°dONLNdµLçX”(t´Task reference†ó°ñ°dONLNdƒXÑd’(Ä¢Can be ModifiedœÄ°dONLNd”X’dÛ)Q:   Yes†ó°ñ°dONLNd‹dÑpÆ(å¢Used by (°dONLNd‰dØpˇ)+: SetAttributes().†ó°ñ°dONLNd˜pÑ|¬(ò¢ Modified by 'İdONLNdp√|Ì)?
  4340. :  Scripts†ó°ñ†óˇ    F◊#ˇ ˇˇˇˇ#◊°ñ 
  4341. _,Times
  4342. .ˇ°dONLNdˇˇ(⁄Z90°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ,     Helvetica°dONLNd)`7÷(R~Tool Type Constants†ó°ñ°dONLNd6`BÈ* TThe following set of constants is used to provide a unique label for different types†ó°ñ°dONLNdjB`NÑ* of tools
  4343. ‘°dONLNdrBÑNâ)$. 
  4344. ‘°dONLNdtBâN⁄)GThese global variables are not configurable, and should not be altered.†ó°ñ†ó°ñ°dONLNdøZ`fÅ(Ç~kClick¿°dONLNd≈ZÇfÖ)" °dONLNd…Zf)n:= 1;†ó°ñ°dONLNd–f`rÄ(é~kDrag)°dONLNd’fÅrÑ)! °dONLNdŸfr)o:= 2;†ó°ñ°dONLNd‡r`~õ(ö~
  4345. kDragClick}°dONLNdÍrú~ü)< °dONLNdÓr~)T:= 3;†ó°ñ°dONLNdı~`äù(¶~
  4346. kMultiDrag°dONLNd~ä)ê:= 4;†ó°ñ°dONLNd    ä`ñû(≤~ kMultiClick(@°dONLNdäüñ¢)? °dONLNdäñ)Q:= 5;†ó°ñ°dONLNdñ`¢∏(æ~kMultiClickDrag%İdONLNd.ñπ¢º)Y °dONLNd1ñ¢)7:= 6;†ó°ñ†ó°ñ°dONLNd7¥`¬‰(›~Palette Type Constants†ó°ñ°dONLNdO¡`ÕÈ* TThe following set of constants is used to provide a unique label for different types†ó°ñ°dONLNd§Õ`Ÿë* of palettes
  4347. $°dONLNdØÕíŸó)2. 
  4348. $°dONLNd±ÕóŸË)GThese global variables are not configurable, and should not be altered.†ó°ñ†ó°ñ°dONLNd˙Â`Ò®(
  4349. ~ kPalDocWind°dONLNdÂÒ)ê:= 1;†ó°ñ°dONLNdÒ`˝î(~kPalWindÇ¿°dONLNdÒî˝ó)4 °dONLNdÒ˝)\:= 2;†ó°ñ°dONLNd!˝`    ù(%~ kPullOffPal°dONLNd/˝    )ê:= 3;†ó°ñ°dONLNd6    `ö(1~    kPopUpPal+İdONLNd?    õû); °dONLNdC    )U:= 4;†ó°ñ°dONLNdJ`!ï(=~
  4350. kScrollPal”İdONLNdTï!ò)5 °dONLNdX!)[:= 5;†óˇZ◊#ˇ ˇˇˇˇ#◊°ñ 
  4351. _,Times
  4352. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛91†ó°ñ,     Helvetica
  4353. °dONLNd/<>(YZ!Initialized In The Initfonts Task†ó°ñ°dONLNd"=<Lx*    Task name
  4354. °dONLNd,@ÑLæ)H
  4355. - InitFonts()†ó°ñ
  4356. °dONLNd:L<[m(wZLocation
  4357. °dONLNdCOÑ[¥)H
  4358. - Font.Lib†ó°ñ°dONLNdN^<j?(ÜZI
  4359. ~@°dONLNdO[@jm)    nitialize
  4360. ô†°dONLNdX^mjs)-- °dONLNd[^Ñj#)"- Must be initialized from within tİdONLNd}^$jH)†scripts pİdONLNdÖ^Ij√)%prior to making any calls.†ó°ñ†ó°ñ°dONLNd†|`äP(•~*Misc. Font Related Script Global Variables†ó°ñ°dONLNdÀâ`ïÂ* RThe following global variables(constants) are default values and if an application†ó°ñ°dONLNdï`°ë* @needs to override them it should be done from within the script.†ó°ñ†ó°ñ°dONLNd`≠`π†* gFontObject†ó°ñ°dONLNdmπÑ≈æ+$ Description z@°dONLNdyπø≈¬);:†ó°ñ°dONLNd|≈ç— (Ì´?We generate TCS records for many of the actions that occur when†ó°ñ°dONLNdº—ç›#* calling the SPEC S&L libraries
  4361. "°dONLNd⁄—$›))ó. 
  4362. "°dONLNd‹—)›€)$Since multiple TCS records are often†ó°ñ°dONLNd›çÈÊ(´Igenerated when performing a single action it is important to tie multiple†ó°ñ°dONLNdKÈçı‘* TCS's together
  4363. •°dONLNdYÈ‘ıŸ)G. 
  4364. •°dONLNd[ÈŸı‰)8gFontObject is used to tie together the TCS records that†ó°ñ°dONLNdîıç„(´Gare generated when exercising Fonts, an object using the Font Libraries
  4365. \İdONLNd€ı‰Ê(.†ó°ñ
  4366. °dONLNd›ç
  4367. ¥()´?This is initialized in InitControlGlobals() and incremented in:†ó°ñ°dONLNd
  4368. ç≈* @WaterFallFontTest() in 'Font.Lib', and DoText() in 'DoTasks.Lib'
  4369. `@°dONLNd]
  4370. ΔÀ(5‰. 
  4371. `@°dONLNd_
  4372. ÀÁ)Script†ó°ñ°dONLNdfç%m(A´0writers should not change this value explicitly.†ó°ñ°dONLNdó%Ñ1Õ(M¢Possible values'°dONLNd¶%Œ1—)J:†ó°ñ°dONLNd™1ç=Æ(Y´Integer†ó°ñ°dONLNd≥=ÑI’(e¢Can be ModifiedœÄ°dONLNd¬=’IÜ)Q&:   Only by the tasks specified below.†ó°ñ°dONLNdÈIÑU±(q¢    Used by :}İdONLNdÚI≤UJ). WaterFallFontTest(), DoText()†ó°ñ°dONLNdUÑa≈(}¢
  4373. Modified by :}°dONLNdUΔaa)B  WaterFallFontTest(), DoText()†ó°ñ†ó°ñ°dONLNd>m`yë(ï~    gFontList†ó°ñ°dONLNdHyÑÖæ+$ Description z@°dONLNdTyøÖ¬);:†ó°ñ°dONLNdVÖåë—(≠™BList containing the names of font menu items which will be used by†ó°ñ°dONLNdôëçù + DoText when exercising fonts.†ó°ñ°dONLNd∏ùÑ©Õ(≈¢Possible values'°dONLNd«ùŒ©—)J:†ó°ñ°dONLNdÀ©çµ“(—´List of strings.†ó°ñ°dONLNd‹µÑ¡’(›¢Can be ModifiedœÄ°dONLNdε’¡Û)Q:   Yes†ó°ñ°dONLNdÛ¡ÑÕ±(È¢    Used by :}İdONLNd¸¡≤Õ®).0 DoText(), RandomFontRecords(), WaterfallTest(),†ó°ñ°dONLNd-ÕçŸ|(ı´,QuickLookTextTest() not currently supported.†ó°ñ°dONLNdZŸÑÂ≈(¢
  4374. Modified by :}°dONLNdgŸΔÂ#)B InitFonts(), Scripts†ó°ñ†ó°ñ°dONLNd~Ò`˝¶(~
  4375. gFontSizeList†ó°ñ°dONLNdç˝Ñ    æ+$ Description z@°dONLNdô˝ø    ¬);:†ó°ñ°dONLNdõ    åÁ(1™GList containing the names of font size menu items which will be used by†ó°ñ°dONLNd„ç! + DoText when exercising fonts.†ó°ñ°dONLNd!Ñ-Õ(I¢Possible values'°dONLNd!Œ-—)J:†ó°ñ°dONLNd-ç9“(U´List of strings.†ó°ñ°dONLNd&9ÑE’(a¢Can be ModifiedœÄ°dONLNd59’EÛ)Q:   Yes†ó°ñ°dONLNd=EÑQ±(m¢    Used by :}İdONLNdFE≤Q™).2  SetSize(), RandomFontRecords(), WaterfallTest(),†ó°ñ°dONLNd{Qç]|(y´,QuickLookTextTest() not currently supported.†ó°ñ°dONLNd®]Ñi≈(Ö¢
  4376. Modified by :}°dONLNdµ]Δi&)B  InitFonts(), Scripts†óˇÍ◊#ˇ ˇˇˇˇ#◊°ñ 
  4377. _,Times
  4378. .ˇ°dONLNdˇˇ(⁄Z92°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)`5´(Q~gFontStyleList†ó°ñ°dONLNd5ÑAæ+$ Description z@°dONLNd5øA¬);:†ó°ñ°dONLNdAåM‹(i™EList containing the names of font style menu items which will be used†ó°ñ°dONLNdcMçY/+  by DoText when exercising fonts.†ó°ñ°dONLNdÖYÑeÕ(Å¢Possible values'°dONLNdîYŒe—)J:†ó°ñ°dONLNdòeçq“(ç´List of strings.†ó°ñ°dONLNd©qÑ}’(ô¢Can be ModifiedœÄ°dONLNd∏q’}Û)Q:   Yes†ó°ñ°dONLNd¿}Ñâ±(•¢    Used by :}İdONLNd…}≤âx).'  RandomFontRecords(), WaterfallTest(),†ó°ñ°dONLNdÚâÑï≈(±¢
  4379. Modified by :}°dONLNdˇâΔï#)B InitFonts(), Scripts†ó°ñ†ó°ñ°dONLNd°`≠Ω(…~gNextLineMethod†ó°ñ°dONLNd)≠Ñπæ+$ Description z@°dONLNd5≠øπ¬);:†ó°ñ°dONLNd7πå≈„(·™IMethod which will place the insertion point so that it is ready for a new†ó°ñ°dONLNdÅ≈ç—√+
  4380. line of text.†ó°ñ°dONLNdè—Ñ›Õ(˘¢Possible values'°dONLNdû—Œ›—)J:†ó°ñ°dONLNd¢›çÈ—(´Integer or List†ó°ñ°dONLNd≤ÈüıÊ+ 1 - ReturnKey,†ó°ñ°dONLNd¬ıü‹* 2 - EnterKey†ó°ñ°dONLNdœü
  4381. * 3 - DownArrow Key†ó°ñ°dONLNd·
  4382. ü’*
  4383. 4 - TabKey†ó°ñ°dONLNdÏü%Ì* {} - Move/Click†ó°ñ°dONLNd¸%ü1’* C{'Untitled'} - Move relative to the window titled 'Untitled' /Click†ó°ñ°dONLNd@1Ñ=’(Y¢Can be ModifiedœÄ°dONLNdO1’=Û)Q:   Yes†ó°ñ°dONLNdW=ÑI±(e¢    Used by :}İdONLNd`=≤IÌ).   NextLine()†ó°ñ°dONLNdmIÑU≈(q¢
  4384. Modified by :}°dONLNdzIΔU#)B InitFonts(), Scripts†ó°ñ†ó°ñ°dONLNdìa`m˜(â~gNextLineClearsFontSettings†ó°ñ°dONLNd∞mÑyæ+$ Description z@°dONLNdºmøy¬);:†ó°ñ°dONLNdæyåÖÃ(°™DFlag indicating whether moving to the next line clears all currently†ó°ñ°dONLNdÖçëº+ Bselected font sizes and styles and resets back to a default value.†ó°ñ°dONLNdFëÑùÕ(π¢Possible values'°dONLNdUëŒù—)J:†ó°ñ°dONLNdYùñ©(≈¥Integer - Boolean ( 0 or 1 )†ó°ñ°dONLNdv©Ñµ’(—¢Can be ModifiedœÄ°dONLNdÖ©’µÛ)Q:   Yes†ó°ñ°dONLNdçµÑ¡±(›¢    Used by :}İdONLNdñµ≤¡).  WaterfallTest()†ó°ñ°dONLNd®¡ÑÕ≈(È¢
  4385. Modified by :}°dONLNdµ¡ΔÕ#)B InitFonts(), Scripts†ó°ñ†ó°ñ°dONLNdß`Âô(~ gPlainStyle†ó°ñ°dONLNdÿÂÑÒæ+$ Description z@°dONLNd‰ÂøÒ¬);:†ó°ñ°dONLNdÊÒå˝—(™@Name of the Plain style menu item or name of the menu item which†ó°ñ°dONLNd'˝ç    ¸+ removes all font styles.†ó°ñ°dONLNd@    ÑÕ(1¢Possible values'°dONLNdO    Œ—)J:†ó°ñ°dONLNdSç!™(=´String†ó°ñ°dONLNdZ!Ñ-’(I¢Can be ModifiedœÄ°dONLNdi!’-Û)Q:   Yes†ó°ñ°dONLNdq-Ñ9±(U¢    Used by :}İdONLNdz-≤9X)."  WaterfallTest(), SetFontParams()†ó°ñ°dONLNdù9ÑE≈(a¢
  4386. Modified by :}°dONLNd™9ΔE#)B InitFonts(), Scripts†óˇ◊#ˇ ˇˇˇˇ#◊°ñ 
  4387. _,Times
  4388. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛93†ó°ñ,     Helvetica°dONLNd/`=(X~Task References (Font Related)†ó°ñ°dONLNd <`HÊ* SThe following set of task references define which default library tasks are used to†ó°ñ°dONLNdtH`TÍ* perform certain functionality
  4389. @°dONLNdëHÎT)ã. 
  4390. @°dONLNdìHT )0If there is a need to override any of these task†ó°ñ°dONLNdƒT``‚(|~Rreferences, all overriding should occur in the script where overriding is necessay
  4391. ˘¿°dONLNdT‚`‰(|.†ó°ñ
  4392. °dONLNd``lÃ(à~IMany of the  SPEC S&L scripts depend upon the default settings to execute†ó°ñ°dONLNdbl`xà* properly
  4393. %İdONLNdjlâxé)). 
  4394. %İdONLNdlléxÍ)HTask references are not supported in Virtual User 1.x,  thus depend upon†ó°ñ°dONLNdµx`Ñ∂(†~Virtual User 2.0x.†ó°ñ†ó°ñ°dONLNd»ê`úç*gSetFont|°dONLNd–êéúî).  °dONLNd”ê®ú¯):= Task SetFont;†ó°ñ°dONLNdÂúÑ®ª(ƒ¢ Descriptionz@°dONLNdúº®ø)8:†ó°ñ°dONLNdۮ祋(–´IIndicates the task that will be called to set fonts when exercising fonts†ó°ñ°dONLNd=¥ç¿÷* using Font.Lib.†ó°ñ°dONLNdN¿ÑÃÕ(Ë¢Possible values'°dONLNd]¿ŒÃ—)J:†ó°ñ°dONLNd_Ãçÿ”(Ù´Task reference†ó°ñ°dONLNdnÿщ’(¢Can be ModifiedœÄ°dONLNd}ÿ’‰Û)Q:   Yes†ó°ñ°dONLNd܉ÑÆ( ¢Used by (°dONLNd鉨)+: SetFontParams().†ó°ñ°dONLNd°Ѹ¬(¢ Modified by 'İdONLNd≠√¸Ì)?
  4395. :  Scripts†ó°ñ†ó°ñ°dONLNd∫`ä(0~gSetSize%¿°dONLNd¬ãë)+  °dONLNd≈®ˆ):= Task SetSize;†ó°ñ°dONLNd◊Ñ ª(<¢ Descriptionz@°dONLNd‚º ø)8:†ó°ñ°dONLNd ç,◊(H´HIndicates the task that will be called to set font sizes when exercising†ó°ñ°dONLNd.,ç8Ò* fonts using Font.Lib.†ó°ñ°dONLNdE8ÑDÕ(`¢Possible values'°dONLNdT8ŒD—)J:†ó°ñ°dONLNdVDçP”(l´Task reference†ó°ñ°dONLNdePÑ\’(x¢Can be ModifiedœÄ°dONLNdtP’\Û)Q:   Yes†ó°ñ°dONLNd}\ÑhÆ(Ñ¢Used by (°dONLNdÖ\Øh)+: SetFontParams().†ó°ñ°dONLNdòhÑt¬(ê¢ Modified by 'İdONLNd§h√tÌ)?
  4396. :  Scripts†ó°ñ†ó°ñ°dONLNdØÄ`åè(®~    gSetStyle–İdONLNd∏Äèåí)/ °dONLNd∫Ä®å˙):= Task SetStyle;†ó°ñ°dONLNdÕåÑòª(¥¢ Descriptionz@°dONLNdÿåºòø)8:†ó°ñ°dONLNd€òç§€(¿´IIndicates the task that will be called to set font styles when exercising†ó°ñ°dONLNd%§ç∞Ò* fonts using Font.Lib.†ó°ñ°dONLNd<∞ѺÕ(ÿ¢Possible values'°dONLNdK∞Œº—)J:†ó°ñ°dONLNdMºç»”(‰´Task reference†ó°ñ°dONLNd\»Ñ‘’(¢Can be ModifiedœÄ°dONLNdk»’‘Û)Q:   Yes†ó°ñ°dONLNdt‘чÆ(¸¢Used by (°dONLNd|‘؇)+: SetFontParams().†ó°ñ°dONLNdè‡ÑϬ(¢ Modified by 'İdONLNdõ‡√ÏÌ)?
  4397. :  Scripts†ó°ñ†ó°ñ°dONLNd¶¯`ï( ~    gNextLine—@°dONLNdدïò)5 °dONLNd±¯®):= Task NextLine;†ó°ñ°dONLNdƒÑª(,¢ Descriptionz@°dONLNdœºø)8:†ó°ñ°dONLNd“ç‘(8´HIndicates the task that will be called to move to the next line to enter†ó°ñ°dONLNdç(±* >additional lines of text when exercising fonts using Font.Lib.†ó°ñ°dONLNd[(Ñ4Õ(P¢Possible values'°dONLNdj(Œ4—)J:†ó°ñ°dONLNdl4ç@”(\´Task reference†ó°ñ°dONLNd{@ÑL’(h¢Can be ModifiedœÄ°dONLNdä@’LÛ)Q:   Yes†ó°ñ°dONLNdìLÑXÆ(t¢Used by (°dONLNdõLØX@)+: ReportSelectedMenuItems().†ó°ñ°dONLNd∏XÑd¬(Ä¢ Modified by 'İdONLNdƒX√dÌ)?
  4398. :  Scripts†ó°ñ†óˇ
  4399. h◊#ˇ ˇˇˇˇ#◊°ñ 
  4400. _,Times
  4401. .ˇ°dONLNdˇˇ(⁄Z94°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ,     Helvetica
  4402. °dONLNd/<>¨(YZInitialized In The 
  4403. E¿°dONLNd0≠>∞)qI
  4404. õ@°dONLNd/∞>8)nitrandomseed Task†ó°ñ°dONLNd'=<Lx(hZ    Task name
  4405. °dONLNd1@ÑL„)H- InitRandomSeed()†ó°ñ
  4406. °dONLNdDL<[m(wZLocation
  4407. °dONLNdMOÑ[√)H
  4408. - Globals.Lib†ó°ñ
  4409. °dONLNd[[<jm(ÜZ
  4410. Initialize
  4411. °dONLNdf^ÑjU)H-- Automatically initialized by InitGlobals().†ó°ñ†ó°ñ°dONLNdóv`Çõ(û~
  4412. gSeedValue†ó°ñ°dONLNd¢ÇÑéæ+$ Description z@°dONLNdÆÇøé¬);:†ó°ñ°dONLNd∞éÑö”(∂¢HThis is the value which will be seeded to the Virtual User built in task†ó°ñ°dONLNd˘öç¶–+     randomSeed()
  4413. vİdONLNdö—¶÷)D. 
  4414. vİdONLNdö÷¶Ê)8It is used to generate all random numbers during runtime
  4415. ]¿°dONLNd?öÁ¶È(¬.†ó°ñ
  4416. °dONLNdA¶ç≤z(Œ´.Tests can be produced which contain randomness
  4417. g¿°dONLNdo¶{≤Ä)Ó. 
  4418. g¿°dONLNdq¶Ä≤⁄)If it is necessary to†ó°ñ°dONLNdá≤çæÂ(⁄´Greproduce these tests it is possible by seeding the RandomSeed with the†ó°ñ°dONLNdœæç ¡* ?same integer. If gSeedValue is set to 0 a random number will be†ó°ñ°dONLNd ç÷ê* 5generated and output for possible use when reseeding.†ó°ñ°dONLNdE÷Ñ‚Õ(˛¢Possible values'°dONLNdT÷Œ‚—)J:†ó°ñ°dONLNdX‚ñÓ∑(
  4419. ¥Integer†ó°ñ°dONLNdcÓ®˙4+ 0 := Generate a random seed.†ó°ñ°dONLNdÇ˙®Ω* 9Any other integer := Use the value as actual random seed.†ó°ñ°dONLNdºÑ’(.¢Can be ModifiedœÄ°dONLNdÀ’Û)Q:   Yes†ó°ñ°dONLNd”ѱ(:¢    Used by :}İdONLNd‹≤M).   InitRandomSeed(), SuiteStart()†ó°ñ°dONLNd˝Ñ*≈(F¢
  4420. Modified by :}°dONLNd
  4421. Δ*H)B InitRandomSeed(), Scripts†ó°ñ†ó°ñ°dONLNd&6`Bñ(^~    gSeedZero&İdONLNd/6óBö)7 †ó°ñ°dONLNd2BÑNæ(j¢ Description z@°dONLNd>BøN¬);:†ó°ñ°dONLNd@NåZÈ(v™EFlag indicating whether or not the gRandomSeed (seen above) should be†ó°ñ°dONLNdÜZçf‰+ Kset to zero. Setting this global to true indicates that the gSeedValue will†ó°ñ°dONLNd“fçr¡* equal zero.†ó°ñ°dONLNdfirÑ~Õ(ö¢Possible values'°dONLNdÌrŒ~—)J:†ó°ñ°dONLNdÒ~ñä(¶¥Integer - Boolean ( 0 or 1 )†ó°ñ°dONLNdäÑñ’(≤¢Can be ModifiedœÄ°dONLNdä’ñÛ)Q:   Yes†ó°ñ°dONLNd%ñÑ¢±(梠   Used by :}İdONLNd.ñ≤¢).  InitRandomSeed()†ó°ñ°dONLNdA¢ÑÆ≈( ¢
  4422. Modified by :}°dONLNdN¢ΔÆÍ)B Scripts†óˇL◊#ˇ ˇˇˇˇ#◊°ñ 
  4423. _,Times
  4424. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛95†ó°ñ,     Helvetica
  4425. °dONLNd/<>*(YZ!Undefined Task References - Hooks†ó°ñ
  4426. °dONLNd#=<Ié* GThe following series of global variables are undefined tasks references
  4427. QİdONLNdj=èIî(e≠. 
  4428. QİdONLNdl=îI‚) They have been†ó°ñ°dONLNd|I<UÀ(qZYprovided as a hook into the libraries so that script writers have the flexibility to call†ó°ñ°dONLNd÷U<aó* Ecustom tasks which may be required when performing certain functions.†ó°ñ†ó°ñ°dONLNdm<y¨*LA task reference is similar to a Proc Pointer in other programming languages
  4429. İdONLNdim≠y≤(ïÀ. 
  4430. İdONLNdkm≤y√) An†ó°ñ°dONLNdoy<Ö‚(°Z^undefined task reference is similar to a call back routine in that it will only be called if a†ó°ñ°dONLNdŒÖ<ë•* script writer defines it
  4431. ¿°dONLNdÊÖ¶ë´)j. 
  4432. ¿°dONLNdËÖ´ë⁄)>  The following example illustrates the way in which undefined†ó°ñ°dONLNd'ë<ù±(πZtask references are used:†ó°ñ†ó°ñ,    Monaco
  4433.     °dONLNdA©`¥+$Task ScrapbookTest(ScrapItem)†ó°ñ°dONLNd_¥`ø~* begin†ó°ñ†ó°ñ°dONLNdh Ñ’&+$if (global gScrapbookSetup)°dONLNdÑ 8’Ï)¥# Hook to do anything prior to†ó°ñ°dONLNd•’®‡2(˝Δcall (gScrapbookSetUp);°dONLNdΩ’8‡ò)ê# Scrapbook call†ó°ñ†ó°ñ°dONLNd—Îш(¢Scrapbook(ScrapItem);°dONLNdËÎ8ˆ™)¥# Call to Scarpbook†ó°ñ°dONLNd¸ˆ`x(~end;†ó°ñ†ó°ñ
  4434. °dONLNd`ª*OIf a script writer isn't interested in doing any setup prior to the call to the†ó°ñ°dONLNdQ`(–* IScrapbook() task, defining the gScrapbookSetup hook would not be required†ó°ñ°dONLNdõ(`47* +since gScrapBookSet is undefined by default
  4435. @°dONLNdΔ(84=)ÿ. 
  4436. @°dONLNd»(=4·)"However, if a script writer wanted†ó°ñ°dONLNdÎ4`@Â(\~Oto make use of this task reference the global gScrapbookSetUp should be defined†ó°ñ°dONLNd;@`L…* Mas the desired task prior to making the call to the ScrapbookTest() task. For†ó°ñ°dONLNdâL`Xã* example:†ó°ñ†ó°ñ
  4437.     °dONLNdìgÑr+$global gScrapbookSetUp°dONLNd™grí)ê:= Task myScrapSetup;†ó°ñ†ó°ñ†ó°ñ
  4438. °dONLNd√äNñ`(≤l3Example Mechanism for Using Task References - Hooks†ó°ñ°dONLNd˜ñ`¢Æ+ @Often times when using task reference hooks provided by SPEC S&L†ó°ñ°dONLNd8¢`Æß* Ayou will need parameters which you may or may not have access to.†ó°ñ°dONLNdzÆ`∫∑* EThe following example is one method of using the task reference hooks†ó°ñ°dONLNd¿∫`Δ¥* Fwhich gets around this problem of not having access to the parameters.†ó°ñ†ó°ñ°dONLNd    “`fi*$For instance, you have a task, TaskA
  4439. ≈°dONLNd-“fi)±. 
  4440. ≈°dONLNd/“fi )$TaskA has a undefined task reference†ó°ñ°dONLNdUfi`Í®(~E(also refered to as a hook), Hook1, which you are interested in using
  4441. @°dONLNdöfi©Í´(«.†ó°ñ
  4442. °dONLNdûÍ`ˆœ(~HHowever, you need to have access to some of TaskA's parameters in Hook1.†ó°ñ°dONLNdˈ`ã* >In order to do this write a new task, TaskB, which calls TaskA
  4443. d@°dONLNd&ˆåë(™. 
  4444. d@°dONLNd(ˆë’)Before calling†ó°ñ°dONLNd8`Á(*~QTaskA, TaskB defines a global variable equal to any/all of the parameters you are†ó°ñ°dONLNdä`ö*
  4445. interested in
  4446. yİdONLNdóõ†);. 
  4447. yİdONLNdô†”)<Now Hook1 has access to TaskA a parameters by accessing this†ó°ñ°dONLNd÷`&ß(B~global variable
  4448. "@°dONLNd®&≠)H. 
  4449. "@°dONLNdÁ≠&ÿ)<Instead of calling TaskA you should call TaskB so Hook1 will†ó°ñ°dONLNd%&`2≈(N~function as expected.†ó°ñ†óˇ◊#ˇ ˇˇˇˇ#◊°ñ 
  4450. _,Times
  4451. .ˇ°dONLNdˇˇ(⁄Z96°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd)`5·(Q~NThe example that follows uses the task OpenFile() which contains the undefined†ó°ñ°dONLNdO5`A* !task  reference 'gOpenFileHook1'.†ó°ñ†ó°ñ†ó°ñ,    Monaco
  4452.     °dONLNdqY`d*$FTask OpenFileWrapper(pNameDoc := "", pSelectOpen := 1, pPathList :={},†ó°ñ°dONLNdπdfioJ+~ pPartialPath := 0)†ó°ñ°dONLNdÃo`z~(ó~begin†ó°ñ°dONLNd”zrÖÿ+ # Define the Hook†ó°ñ°dONLNdÊÖrêÄ* -global gOpenFileHook1 := Task SelectFileType;†ó°ñ†ó°ñ°dONLNdõr¶*C# Define the parameters you are interested in to a global variable.†ó°ñ°dONLNd]¶r±b* (global gOpenFileHook1Params := pNameDoc;†ó°ñ†ó°ñ†ó°ñ°dONLNdé«r“*!# Call the original task†ó°ñ°dONLNd©“r›¬* 8OpenFile(pNameDoc, pSelectOpen, pPathList, pPartialPath)†ó°ñ°dONLNd‚›`Ëx(~end;†ó°ñ†óˇ$z◊#ˇ ˇˇˇˇ#◊°ñ 
  4453. _,Times
  4454. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛97†ó°ñ
  4455. °dONLNd)ƒ8t(T‚Hooks Provided In Spec S&L†ó°ñ†ó°ñ
  4456. °dONLNdBeN°(jÉ    Hook Name†ó°ñ†ó°ñ°dONLNd%B%NN)¿Purpose†ó°ñ†ó°ñ°dONLNd.BÃNÙ)ßUsed by†ó°ñ†ó"^T"^T"`V# ^W^Ë `W`Ë"^È"`È ^Ï^¿ `Ï`¿"^¡"`¡"^ƒp"`ƒp"^5#"`5#"aT"aV"aÈ"a¡"a5"a7°ñ,    Monaco
  4457.     °dONLNd8\<gÑ(ÑZ gClearDoText†ó°ñ
  4458. °dONLNdE\–hé)î'a hook in DoText() for any cleanup that†ó°ñ°dONLNdmh–tz* %needs to happen after text tests end.†ó°ñ
  4459.     °dONLNdì\¨g‹(Ñ DoText()†ó"yV"yT yWyË"yÈ yÎy¿"y¡"y√q"y7"y5"{T"{V"{È"{¡"{5"{7°ñ°dONLNdùu<Äú(ùZgCustomScrapPict†ó°ñ
  4460. °dONLNdÆu–Åã)î(to replace the default call to Scrapbook†ó°ñ°dONLNd◊Å–çç* $(global kScrapPICT) in DoSetupApp ()†ó°ñ°dONLNd¸ç–ôO* with your own set of calls.†ó°ñ
  4461.     °dONLNdu¨ÄÙ(ù  DoSetUpApp()†ó"ìV"ìT    ™U™U™U™U ìWìË    ˇˇˇˇˇˇˇˇ"ìÈ    ™U™U™U™U ìÍì¿    ˇˇˇˇˇˇˇˇ"ì¡    ™U™U™U™U"ì¬r    ˇˇˇˇˇˇˇˇ"ì7"ì5"îT#"îV#"îÈ#"î¡#"î5#"î7#°ñ°dONLNd&ö<•ú(¬ZgCustomScrapText†ó°ñ
  4462. °dONLNd7ö–¶ã)î(to replace the default call to Scrapbook†ó°ñ°dONLNd`¶–≤ë* $(global kScrapTEXT) in DoSetupApp ()†ó°ñ°dONLNdÖ≤–æO* with your own set of calls.†ó°ñ†ó°ñ
  4463.     °dONLNd£ö¨•Ù(¬  DoSetUpApp()†ó"∏V"∏T    ™U™U™U™U ∏W∏Ë    ˇˇˇˇˇˇˇˇ"∏È    ™U™U™U™U ∏Í∏¿    ˇˇˇˇˇˇˇˇ"∏¡    ™U™U™U™U"∏¬r    ˇˇˇˇˇˇˇˇ"∏7"∏5"πT/"πV/"πÈ/"π¡/"π5/"π7/°ñ°dONLNd±À<÷ä(ÛZ
  4464. gDismissSFPut†ó°ñ
  4465. °dONLNdøÀ–◊)î%a hook in SaveAs () at the end of the†ó°ñ°dONLNdÂ◊–„w* #SaveAs() tasks for various dialogs.†ó°ñ†ó°ñ
  4466.     °dONLNd
  4467. À¨÷‹(Û DoText()†ó"ÈV"ÈT    ™U™U™U™U ÈWÈË    ˇˇˇˇˇˇˇˇ"ÈÈ    ™U™U™U™U ÈÍÈ¿    ˇˇˇˇˇˇˇˇ"È¡    ™U™U™U™U"Ȭr    ˇˇˇˇˇˇˇˇ"È7"È5"ÍT#"ÍV#"ÍÈ#"Í¡#"Í5#"Í7#°ñ°dONLNd<˚ú(ZgDoCloseAppHook1†ó°ñ
  4468. °dONLNd$–¸Å)î%to do anything before any actions are†ó°ñ°dONLNdJ¸–?* taken in DoCloseApp()†ó°ñ
  4469.     °dONLNd`¨˚Ù(  DoCloseApp()†ó°ñ†ó"V"T    ™U™U™U™U WË    ˇˇˇˇˇˇˇˇ"È    ™U™U™U™U Í¿    ˇˇˇˇˇˇˇˇ"¡    ™U™U™U™U"¬r    ˇˇˇˇˇˇˇˇ"7"5"T"V"È"¡"5"7°ñ°dONLNdo    <ú(1ZgDoCloseAppHook2†ó°ñ
  4470. °dONLNd    –r)î"hook to do anything after printing†ó°ñ
  4471.     °dONLNd¢    ¨Ù)‹ DoCloseApp()†ó°ñ†ó"'V"'T    ™U™U™U™U 'W'Ë    ˇˇˇˇˇˇˇˇ"'È    ™U™U™U™U 'Í'¿    ˇˇˇˇˇˇˇˇ"'¡    ™U™U™U™U"'¬r    ˇˇˇˇˇˇˇˇ"'7"'5"(T"(V"(È"(¡"(5"(7°ñ°dONLNd± <+ú(HZgDoCloseAppHook3†ó°ñ
  4472. °dONLNd¡ –,î)î)hook to do anything after quiting the app†ó°ñ
  4473.     °dONLNdΠ¨+Ù)‹ DoCloseApp()†ó°ñ†ó">V">T    ™U™U™U™U >W>Ë    ˇˇˇˇˇˇˇˇ">È    ™U™U™U™U >Í>¿    ˇˇˇˇˇˇˇˇ">¡    ™U™U™U™U">¬r    ˇˇˇˇˇˇˇˇ">7">5"?T"?V"?È"?¡"?5"?7°ñ°dONLNd˙7<Bú(_ZgDoSetupAppHook1†ó°ñ
  4474. °dONLNd
  4475. 7–Cò)î&hook to do anything before DoSeupApp()†ó°ñ°dONLNd1C–O8* actions are completed†ó°ñ
  4476.     °dONLNdG7¨BÙ(_  DoSetupApp()†ó°ñ†ó"UV"UT    ™U™U™U™U UWUË    ˇˇˇˇˇˇˇˇ"UÈ    ™U™U™U™U UÍU¿    ˇˇˇˇˇˇˇˇ"U¡    ™U™U™U™U"U¬r    ˇˇˇˇˇˇˇˇ"U7"U5"VT"VV"VÈ"V¡"V5"V7°ñ°dONLNdVP<[ú(xZgDoSetupAppHook2†ó°ñ
  4477. °dONLNdfP–\})î#replaces DoSpecialTest(1) with 1 as†ó°ñ°dONLNdä\–hÅ* $parameter. Hook to do anything after†ó°ñ°dONLNdØh–tV* dismissing opening diaolog.†ó°ñ
  4478.     °dONLNdÀP¨[Ù(x  DoSetupApp()†ó°ñ†ó"nV"nT    ™U™U™U™U nWnË    ˇˇˇˇˇˇˇˇ"nÈ    ™U™U™U™U nÍn¿    ˇˇˇˇˇˇˇˇ"n¡    ™U™U™U™U"n¬r    ˇˇˇˇˇˇˇˇ"n7"n5"oT#"oV#"oÈ#"o¡#"o5#"o7#°ñ°dONLNd⁄u<Ä®(ùZgLaunchTwitchHook1†ó°ñ
  4479. °dONLNdÏu–ÅÉ)î&hook to do anything prior to Preflight†ó°ñ
  4480.     °dONLNdu¨Ä)‹LaunchTwitch()†ó°ñ†ó"ìV"ìT    ™U™U™U™U ìWìË    ˇˇˇˇˇˇˇˇ"ìÈ    ™U™U™U™U ìÍì¿    ˇˇˇˇˇˇˇˇ"ì¡    ™U™U™U™U"ì¬r    ˇˇˇˇˇˇˇˇ"ì7"ì5"îT"îV"îÈ"î¡"î5"î7°ñ°dONLNd$å<ó®(¥ZgLaunchTwitchHook2†ó°ñ
  4481. °dONLNd6å–òè)î(hook to do anything prior to any type of†ó°ñ°dONLNd_ò–§ˇ*     launching†ó°ñ
  4482.     °dONLNdiå¨ó(¥ LaunchTwitch()†ó°ñ†ó"™V"™T    ™U™U™U™U ™W™Ë    ˇˇˇˇˇˇˇˇ"™È    ™U™U™U™U ™Í™¿    ˇˇˇˇˇˇˇˇ"™¡    ™U™U™U™U"™¬r    ˇˇˇˇˇˇˇˇ"™7"™5"´T"´V"´È"´¡"´5"´7°ñ°dONLNdz•<∞®(ÕZgLaunchTwitchHook3†ó°ñ
  4483. °dONLNdå•–±ò)î)hook to do anything prior to launching by†ó°ñ°dONLNd∂±–Ω* type selecting†ó°ñ
  4484.     °dONLNd≈•¨∞(Õ LaunchTwitch()†ó°ñ†ó"√V"√T    ™U™U™U™U √W√Ë    ˇˇˇˇˇˇˇˇ"√È    ™U™U™U™U √Í√¿    ˇˇˇˇˇˇˇˇ"√¡    ™U™U™U™U"√¬r    ˇˇˇˇˇˇˇˇ"√7"√5"ƒT"ƒV"ƒÈ"ƒ¡"ƒ5"ƒ7°ñ°dONLNd÷æ<…®(ÊZgLaunchTwitchHook4†ó°ñ
  4485. °dONLNdËæ– Ö)î&hook to do anything priot to returning†ó°ñ
  4486.     °dONLNd樅)‹LaunchTwitch()†ó°ñ†ó"‹V"‹T    ™U™U™U™U ‹W‹Ë    ˇˇˇˇˇˇˇˇ"‹È    ™U™U™U™U ‹Í‹¿    ˇˇˇˇˇˇˇˇ"‹¡    ™U™U™U™U"‹¬r    ˇˇˇˇˇˇˇˇ"‹7"‹5"›T"›V"›È"›¡"›5"›7°ñ°dONLNd ’<‡~(˝Z gLogStrHook†ó°ñ
  4487. °dONLNd+’–·p)î!hook to do anything after logging†ó°ñ
  4488.     °dONLNdM’¨‡‹)‹LogStr()†ó°ñ†ó"ÛV"ÛT    ™U™U™U™U ÛWÛË    ˇˇˇˇˇˇˇˇ"ÛÈ    ™U™U™U™U ÛÍÛ¿    ˇˇˇˇˇˇˇˇ"Û¡    ™U™U™U™U"Û¬r    ˇˇˇˇˇˇˇˇ"Û7"Û5"ÙT"ÙV"ÙÈ"Ù¡"Ù5"Ù7°ñ°dONLNdXÏ<˜ñ(ZgModifyDocument†ó°ñ
  4489. °dONLNdiÏ–¯ó)î*to do something other than the default for†ó°ñ°dONLNdï* 'modifying a document (which is typing a†ó°ñ°dONLNdº–å* +string of text),  e.g. if you need to paste†ó°ñ°dONLNdË–á* %from the scrapbook in order to modify†ó°ñ°dONLNd–(*
  4490. your document
  4491. –@°dONLNd()H. 
  4492. –@°dONLNd(ò)Requires a return value to†ó°ñ°dONLNd8(–4ì(PÓ)indicate success or failure. (See example†ó°ñ°dONLNdb4–@i*  in the Canvas.vu sample script.)†ó°ñ†ó°ñ
  4493.     °dONLNdÑϨ˜ ( ModifyDocument()†ó"
  4494. V"
  4495. T    ™U™U™U™U 
  4496. W
  4497. Ë    ˇˇˇˇˇˇˇˇ"
  4498. È    ™U™U™U™U 
  4499. Í
  4500. ¿    ˇˇˇˇˇˇˇˇ"
  4501. ¡    ™U™U™U™U"
  4502. ¬r    ˇˇˇˇˇˇˇˇ"
  4503. 7"
  4504. 5" T_" V_" È_" ¡_" 5_" 7_°ñ°dONLNdñM<Xê(uZgOpenFileHook1†ó°ñ
  4505. °dONLNd§M–Yè)î&before typing the name of the document†ó°ñ°dONLNdÀY–e*
  4506. to be opened.†ó°ñ†ó°ñ†ó°ñ
  4507.     °dONLNd⁄M¨XË(u 
  4508. OpenFile()†ó"kV"kT    ™U™U™U™U kWkË    ˇˇˇˇˇˇˇˇ"kÈ    ™U™U™U™U kÍk¿    ˇˇˇˇˇˇˇˇ"k¡    ™U™U™U™U"k¬r    ˇˇˇˇˇˇˇˇ"k7"k5"lT/"lV/"lÈ/"l¡/"l5/"l7/°ñ°dONLNdÊ~<â®(¶ZgPatchLaunchTwitch†ó°ñ
  4509. °dONLNd¯~–äò)î'hook to substitute SPEC S&L's launching†ó°ñ°dONLNd ä–ñ3* with another method†ó°ñ
  4510.     °dONLNd4~¨â˙(¶ 
  4511. LauchTwitch()†ó°ñ†ó"úV"úT    ™U™U™U™U úWúË    ˇˇˇˇˇˇˇˇ"úÈ    ™U™U™U™U úÍú¿    ˇˇˇˇˇˇˇˇ"ú¡    ™U™U™U™U"ú¬r    ˇˇˇˇˇˇˇˇ"ú7"ú5"ùT"ùV    ™U™U™U™U µTµË    ˇˇˇˇˇˇˇˇ"ùÈ    ™U™U™U™U"µÈ µÍµ¿    ˇˇˇˇˇˇˇˇ"ù¡    ™U™U™U™U"µ¡"µ¬r    ˇˇˇˇˇˇˇˇ"ù5"ù7    ™U™U™U™U"µ5ˇ!ò◊#ˇ ˇˇˇˇ#◊°ñ 
  4512. _,Times
  4513. .ˇ°dONLNdˇˇ(⁄Z98°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ°dONLNd,e8°(TÉ    Hook Name†ó°ñ°dONLNd    ,%8N)¿Purpose†ó°ñ°dONLNd,Ã8Ù)ßUsed by†ó"HT"HT"JV# HWHË JWJË"HÈ"JÈ HÏH¿ JÏJ¿"H¡"J¡"Hƒp"Jƒp"H5#"J5#"KT "KV "KÈ "K¡ "K5 "K7 °ñ,    Monaco
  4514.     °dONLNd:<E¥(bZgPreSelectButtonHook†ó°ñ
  4515. °dONLNd/:–Fî)î)a hook in SelectButton() before selecting†ó°ñ°dONLNdYF–R˘*     a button.†ó°ñ†ó°ñ
  4516.     °dONLNdd:¨E(b SelectButton()†ó"WV"WT WWWË"WÈ WÎW¿"W¡"W√q"W7"W5"YT#"YV#"YÈ#"Y¡#"Y5#"Y7#°ñ°dONLNdt_<j¿(áZgPreSelectMenuItemHook†ó°ñ
  4517. °dONLNdã_–kx)î!a hook in SelectMenuItem() before†ó°ñ°dONLNd≠k–w;* selecting a menu item.†ó°ñ†ó°ñ
  4518.     °dONLNd≈_¨j (á SelectMenuItem()†ó"}V"}T    ™U™U™U™U }W}Ë    ˇˇˇˇˇˇˇˇ"}È    ™U™U™U™U }Í}¿    ˇˇˇˇˇˇˇˇ"}¡    ™U™U™U™U"}¬r    ˇˇˇˇˇˇˇˇ"}7"}5"~T#"~V#"~È#"~¡#"~5#"~7#°ñ°dONLNd◊Ñ<èΔ(¨ZgPostSelectMenuItemHook†ó°ñ
  4519. °dONLNdÔÑ–êo)î a hook in SelectMenuItem() after†ó°ñ°dONLNdê–ú;* selecting a menu item.†ó°ñ†ó°ñ
  4520.     °dONLNd(Ѩè (¨ SelectMenuItem()†ó"¢V"¢T    ™U™U™U™U ¢W¢Ë    ˇˇˇˇˇˇˇˇ"¢È    ™U™U™U™U ¢Í¢¿    ˇˇˇˇˇˇˇˇ"¢¡    ™U™U™U™U"¢¬r    ˇˇˇˇˇˇˇˇ"¢7"¢5"£T#"£V#"£È#"£¡#"£5#"£7#°ñ°dONLNd:©<¥ä(—Z
  4521. gPreKeyEqHook†ó°ñ
  4522. °dONLNdH©–µî)î(a hook in KeyEq() before selecting a key†ó°ñ°dONLNdqµ–¡* equivalent.†ó°ñ†ó°ñ
  4523.     °dONLNd~©¨¥‹(—  KeyEq()†ó"«V"«T    ™U™U™U™U «W«Ë    ˇˇˇˇˇˇˇˇ"«È    ™U™U™U™U «Í«¿    ˇˇˇˇˇˇˇˇ"«¡    ™U™U™U™U"«¬r    ˇˇˇˇˇˇˇˇ"«7"«5"»T#"»V#"»È#"»¡#"»5#"»7#°ñ°dONLNdàŒ<Ÿ¢(ˆZgPreMoveMouseHook†ó°ñ
  4524. °dONLNdöŒ–⁄ç)î#a hook in MoveMouse() before moving†ó°ñ°dONLNdæ⁄–Ê*
  4525. the mouse.†ó°ñ†ó°ñ
  4526.     °dONLNd Œ¨ŸÓ(ˆ  MoveMouse()†ó"ÏV"ÏT    ™U™U™U™U ÏWÏË    ˇˇˇˇˇˇˇˇ"ÏÈ    ™U™U™U™U ÏÍÏ¿    ˇˇˇˇˇˇˇˇ"Ï¡    ™U™U™U™U"Ϭr    ˇˇˇˇˇˇˇˇ"Ï7"Ï5"ÌT#"ÌV#"ÌÈ#"Ì¡#"Ì5#"Ì7#°ñ°dONLNd◊Û<˛®(ZgPreSpecialKeyHook†ó°ñ
  4527. °dONLNdÍÛ–ˇñ)î)a hook in SpecialKey() before selecting a†ó°ñ°dONLNdˇ– * special key.†ó°ñ†ó°ñ
  4528.     °dONLNd"Û¨˛‹( SaveAs()†ó"V"T    ™U™U™U™U WË    ˇˇˇˇˇˇˇˇ"È    ™U™U™U™U Í¿    ˇˇˇˇˇˇˇˇ"¡    ™U™U™U™U"¬r    ˇˇˇˇˇˇˇˇ"7"5"T#"V#"È#"¡#"5#"7#°ñ°dONLNd,<#Ã(@ZgReportSelectedMenuItems†ó°ñ
  4529. °dONLNdE–$Z)îto replace the default calls in†ó°ñ°dONLNdf$–0â* #ReportSelectedMenuItems() with your†ó°ñ°dONLNdä0–<* own set of calls
  4530. xİdONLNdö0<)K.†ó°ñ†ó°ñ
  4531.     °dONLNdû¨#‚(@     DoText(),†ó°ñ°dONLNd®#¨.* WaterfallFontTest()†ó"6V"6T    ™U™U™U™U 6W6Ë    ˇˇˇˇˇˇˇˇ"6È    ™U™U™U™U 6Í6¿    ˇˇˇˇˇˇˇˇ"6¡    ™U™U™U™U"6¬r    ˇˇˇˇˇˇˇˇ"67"65"7T/"7V/"7È/"7¡/"75/"77/°ñ°dONLNdΩI<TÑ(qZ gSetupDoDraw†ó°ñ
  4532. °dONLNd I–Uï)î)to do something prior to performing tests†ó°ñ°dONLNdÙU–a!* using DoDraw().†ó°ñ†ó°ñ
  4533.     °dONLNdI¨T‹(q DoDraw()†ó"gV"gT    ™U™U™U™U gWgË    ˇˇˇˇˇˇˇˇ"gÈ    ™U™U™U™U gÍg¿    ˇˇˇˇˇˇˇˇ"g¡    ™U™U™U™U"g¬r    ˇˇˇˇˇˇˇˇ"g7"g5"hT#"hV#"hÈ#"h¡#"h5#"h7#°ñ°dONLNdn<yú(ñZgSetUpForSaveDoc†ó°ñ
  4534. °dONLNd n–zÜ)î'to do additional set up before saving a†ó°ñ°dONLNdHz–Üt* !document,  e.g. closing a window.†ó°ñ†ó°ñ
  4535.     °dONLNdkn¨yÙ(ñ  DoSetUpApp()†ó"åV"åT    ™U™U™U™U åWåË    ˇˇˇˇˇˇˇˇ"åÈ    ™U™U™U™U åÍå¿    ˇˇˇˇˇˇˇˇ"å¡    ™U™U™U™U"å¬r    ˇˇˇˇˇˇˇˇ"å7"å5"çT#"çV#"çÈ#"ç¡#"ç5#"ç7#°ñ°dONLNdyì<ûÑ(ªZ gSetupDoText†ó°ñ
  4536. °dONLNdÜì–üï)î)to do something prior to performing tests†ó°ñ°dONLNd∞ü–´* using DoText().†ó°ñ†ó°ñ
  4537.     °dONLNd¡ì¨û‹(ª DoText()†ó"±V"±T    ™U™U™U™U ±W±Ë    ˇˇˇˇˇˇˇˇ"±È    ™U™U™U™U ±Í±¿    ˇˇˇˇˇˇˇˇ"±¡    ™U™U™U™U"±¬r    ˇˇˇˇˇˇˇˇ"±7"±5"≤T#"≤V#"≤È#"≤¡#"≤5#"≤7#°ñ°dONLNdÀ∏<√Ñ(‡Z gSaveAsHook1†ó°ñ
  4538. °dONLNdÿ∏–ƒì)î'a hook in SaveAs(). For example, saving†ó°ñ°dONLNdƒ––7* files in other formats.†ó°ñ†ó°ñ
  4539.     °dONLNd∏¨√‹(‡ SaveAs()†ó"÷V"÷T    ™U™U™U™U ÷W÷Ë    ˇˇˇˇˇˇˇˇ"÷È    ™U™U™U™U ÷Í÷¿    ˇˇˇˇˇˇˇˇ"÷¡    ™U™U™U™U"÷¬r    ˇˇˇˇˇˇˇˇ"÷7"÷5"◊T#"◊V#"◊È#"◊¡#"◊5#"◊7#°ñ°dONLNd#›<ËÑ(Z gSaveAsHook2†ó°ñ
  4540. °dONLNd/›–Èç)î'a hook in SaveAs(). For example,  after†ó°ñ°dONLNdWÈ–ı,* saving a document.†ó°ñ†ó°ñ
  4541.     °dONLNdk›¨Ë‹( SaveAs()†ó"˚V"˚T    ™U™U™U™U ˚W˚Ë    ˇˇˇˇˇˇˇˇ"˚È    ™U™U™U™U ˚Í˚¿    ˇˇˇˇˇˇˇˇ"˚¡    ™U™U™U™U"˚¬r    ˇˇˇˇˇˇˇˇ"˚7"˚5"¸T#"¸V#"¸È#"¸¡#"¸5#"¸7#°ñ°dONLNdu<
  4542. Ñ(*Z gSaveAsHook3†ó°ñ
  4543. °dONLNdÅ–Ä)î$a hook in SaveAs(). For example,  to†ó°ñ°dONLNd¶–â* (dismiss additional dialogs after a save,†ó°ñ°dONLNdœ–&x* "such as the summary-info dialog in†ó°ñ°dONLNdÚ&–2;* Microsoft Word v.5.0.†ó°ñ†ó°ñ
  4544.     °dONLNd    ¨
  4545. ‹(* SaveAs()†ó" V" T    ™U™U™U™U  W Ë    ˇˇˇˇˇˇˇˇ" È    ™U™U™U™U  Í ¿    ˇˇˇˇˇˇˇˇ" ¡    ™U™U™U™U" ¬r    ˇˇˇˇˇˇˇˇ" 7" 5"!T;"!V;"!È;"!¡;"!5;"!7;°ñ°dONLNd?<Jú(gZgSuiteFooterHook†ó°ñ
  4546. °dONLNd#?–Kô)î+used to add information to the suite footer†ó°ñ
  4547.     °dONLNdO?¨JË)‹
  4548. SuiteEnd()†ó°ñ†ó"]V"]T    ™U™U™U™U ]W]Ë    ˇˇˇˇˇˇˇˇ"]È    ™U™U™U™U ]Í]¿    ˇˇˇˇˇˇˇˇ"]¡    ™U™U™U™U"]¬r    ˇˇˇˇˇˇˇˇ"]7"]5"^T"^V"^È"^¡"^5"^7°ñ°dONLNd\V<aê(~ZgTCSStartHook1†ó°ñ
  4549. °dONLNdjV–bå)î&hook to do anything before TCSStart si†ó°ñ°dONLNdëb–nÏ* called†ó°ñ
  4550.     °dONLNdòV¨aË(~ 
  4551. TCSStart()†ó°ñ†ó"tV"tT    ™U™U™U™U tWtË    ˇˇˇˇˇˇˇˇ"tÈ    ™U™U™U™U tÍt¿    ˇˇˇˇˇˇˇˇ"t¡    ™U™U™U™U"t¬r    ˇˇˇˇˇˇˇˇ"t7"t5"uT"uV"uÈ"u¡"u5"u7°ñ°dONLNd•o<zú(óZgTypeStrOverRide†ó°ñ
  4552. °dONLNdµo–{à)î'used to manipulate strings that contain†ó°ñ°dONLNd›{–á.* two-byte characters†ó°ñ
  4553.     °dONLNdÒo¨z‚(ó     TypeStr()†ó"çV"çT    ™U™U™U™U çWçË    ˇˇˇˇˇˇˇˇ"çÈ    ™U™U™U™U çÍç¿    ˇˇˇˇˇˇˇˇ"ç¡    ™U™U™U™U"ç¬r    ˇˇˇˇˇˇˇˇ"ç7"ç5"éT"éV"®T"¶T"¶V# ¶W¶Ë ®W®Ë"éÈ"¶È"®È ¶Ï¶¿ ®Ï®¿"é¡"¶¡"®¡"¶ƒp"®ƒp"é5"é7"®5"¶7"¶5#°ñ    ™U™U™U™U ©N©
  4554. "©  ±N±
  4555. "±     ˇˇˇˇˇˇˇˇ"™N"™ †óˇ;í◊#ˇ ˇˇˇˇ#◊°ñ 
  4556. _,Times
  4557. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄˛99†ó°ñ,     Helvetica
  4558. °dONLNd6<HÉ(cZ#Appendix H - Test Cases in SPEC S&L TXT
  4559.  gXg
  4560. †ó°ñ†ó°ñ
  4561. °dONLNd#Ye:(Å6Owner /†ó°ñ°dONLNd+dp;* TCType†ó°ñ°dONLNd2Y[eë(Åy TCSet : TC#†ó°ñ°dONLNd>Yæe—)cDesc†ó°ñ°dONLNdCYNec)êTask†ó°ñ°dONLNdHY√e‰)uLibrary†ó"u0"u0"w2#"u3@"w3@"ut"wt"uw_"ww_"u◊"w◊ u⁄uf w⁄wf"ug"wg"ujq"wjq"u‹"w‹"uflK"wflK"u+#"w+#"x0"x2"xt"x◊"xg"x‹"x+"x-°ñ°dONLNdQq}C(ô6SPECS&L†ó°ñ°dONLNdY|àO*
  4562. Compatibility†ó°ñ°dONLNdgq[}Ö(ôy
  4563. Launch : 1†ó°ñ°dONLNdrqæ}?)cLaunch '{ItemName}' via Apple†ó°ñ°dONLNdê|æà’* Menu†ó°ñ°dONLNdïqN}ß(ôlLaunchByAppleMenu†ó°ñ°dONLNdßq√})uLaunchQuit.Lib†ó"é2"é0"é3@"ét"év`"é◊ éŸéf"ég"éir"é‹"éfiL"é-"é+"ê0"ê2"êt"ê◊"êg"ê‹"ê+"ê-°ñ°dONLNd∑àîC(∞6SPECS&L†ó°ñ°dONLNdøìüO*
  4564. Compatibility†ó°ñ°dONLNdÕà[îÖ(∞y
  4565. Launch : 2†ó°ñ°dONLNdÿàæî:)cLaunch '{AppName}' via Type†ó°ñ°dONLNdÙìæü÷* Select†ó°ñ°dONLNd˚àNî§(∞lLaunchByTypeSelect†ó°ñ°dONLNdà√î)uLaunchQuit.Lib†ó"¶2"¶0    ™U™U™U™U"¶3@    ˇˇˇˇˇˇˇˇ"¶t    ™U™U™U™U"¶ua    ˇˇˇˇˇˇˇˇ"¶◊    ™U™U™U™U ¶ÿ¶f    ˇˇˇˇˇˇˇˇ"¶g    ™U™U™U™U"¶hs    ˇˇˇˇˇˇˇˇ"¶‹    ™U™U™U™U"¶›M    ˇˇˇˇˇˇˇˇ"¶-"¶+"ß0"ß2"ßt"ß◊"ßg"ß‹"ß+"ß-°ñ°dONLNdü´C(«6SPECS&L†ó°ñ°dONLNd&™∂O*
  4566. Compatibility†ó°ñ°dONLNd4ü[´Ö(«y
  4567. Launch : 3†ó°ñ°dONLNd?üæ´E)cLaunch or twitch to '{AppName}'†ó°ñ°dONLNd_üN´à)ê LaunchTwitch†ó°ñ°dONLNdlü√´)uLaunchQuit.Lib†ó"Ω2"Ω0    ™U™U™U™U"Ω3@    ˇˇˇˇˇˇˇˇ"Ωt    ™U™U™U™U"Ωua    ˇˇˇˇˇˇˇˇ"Ω◊    ™U™U™U™U ΩÿΩf    ˇˇˇˇˇˇˇˇ"Ωg    ™U™U™U™U"Ωhs    ˇˇˇˇˇˇˇˇ"Ω‹    ™U™U™U™U"Ω›M    ˇˇˇˇˇˇˇˇ"Ω-"Ω+"æ0"æ2"æt"æ◊"æg"æ‹"æ+"æ-°ñ°dONLNd|∂¬C(fi6SPECS&L†ó°ñ°dONLNdÑ¡ÕO*
  4568. Compatibility†ó°ñ°dONLNdí∂[¬Ö(fiy
  4569. Launch : 4†ó°ñ°dONLNdù∂æ¬E)c!Twitch from {global gapptitle} to†ó°ñ°dONLNdø¡æÕ.* {AppName} via process list†ó°ñ°dONLNd⁄∂N¬r(filTwitcher†ó°ñ°dONLNd„∂√¬)uLaunchQuit.Lib†ó"‘2"‘0    ™U™U™U™U"‘3@    ˇˇˇˇˇˇˇˇ"‘t    ™U™U™U™U"‘ua    ˇˇˇˇˇˇˇˇ"‘◊    ™U™U™U™U ‘ÿ‘f    ˇˇˇˇˇˇˇˇ"‘g    ™U™U™U™U"‘hs    ˇˇˇˇˇˇˇˇ"‘‹    ™U™U™U™U"‘›M    ˇˇˇˇˇˇˇˇ"‘-"‘+"’0"’2"’t"’◊"’g"’‹"’+"’-°ñ°dONLNdÛÕŸC(ı6SPECS&L†ó°ñ°dONLNd˚ÿ‰O*
  4570. Compatibility†ó°ñ°dONLNd    Õ[Ÿy(ıyQuit : 1†ó°ñ°dONLNdÕæŸ0)cSelected the 'Quit' menuitem†ó°ñ°dONLNd/ÕNŸ_)êQuit†ó°ñ°dONLNd4Õ√Ÿ)uLaunchQuit.Lib†ó"Î2"Î0    ™U™U™U™U"Î3@    ˇˇˇˇˇˇˇˇ"Ît    ™U™U™U™U"Îua    ˇˇˇˇˇˇˇˇ"Î◊    ™U™U™U™U ÎÿÎf    ˇˇˇˇˇˇˇˇ"Îg    ™U™U™U™U"Îhs    ˇˇˇˇˇˇˇˇ"΋    ™U™U™U™U"ΛM    ˇˇˇˇˇˇˇˇ"Î-"Î+"Ï0"Ï2"Ït"Ï◊"Ïg"Ï‹"Ï+"Ï-°ñ°dONLNdD‰C( 6SPECS&L†ó°ñ°dONLNdLÔ˚O*
  4571. Compatibility†ó°ñ°dONLNdZ‰[w( yQuit: 2†ó°ñ°dONLNdb‰æ)cTyped command - Q†ó°ñ°dONLNdt‰N_)êQuit†ó°ñ°dONLNdy‰√)uLaunchQuit.Lib†ó"2"0    ™U™U™U™U"3@    ˇˇˇˇˇˇˇˇ"t    ™U™U™U™U"ua    ˇˇˇˇˇˇˇˇ"◊    ™U™U™U™U ÿf    ˇˇˇˇˇˇˇˇ"g    ™U™U™U™U"hs    ˇˇˇˇˇˇˇˇ"‹    ™U™U™U™U"›M    ˇˇˇˇˇˇˇˇ"-"+"0"2"t"◊"g"‹"+"-°ñ°dONLNdâ˚C(#6SPECS&L†ó°ñ°dONLNdëO*
  4572. Compatibility†ó°ñ°dONLNdü˚[w(#yQuit: 3†ó°ñ°dONLNdß˚æ )cBG Quit - Selected 'Quit†ó°ñ°dONLNd¿æ˘* Application(s)'†ó°ñ°dONLNd–˚N•(#lQuitBackgroundApps†ó°ñ°dONLNd„˚√)uLaunchQuit.Lib†ó"2"0    ™U™U™U™U"3@    ˇˇˇˇˇˇˇˇ"t    ™U™U™U™U"ua    ˇˇˇˇˇˇˇˇ"◊    ™U™U™U™U ÿf    ˇˇˇˇˇˇˇˇ"g    ™U™U™U™U"hs    ˇˇˇˇˇˇˇˇ"‹    ™U™U™U™U"›M    ˇˇˇˇˇˇˇˇ"-"+"0"2"t"◊"g"‹"+"-°ñ°dONLNdÛC(:6SPECS&L†ó°ñ°dONLNd˚)O*
  4573. Compatibility†ó°ñ°dONLNd    [y(:yQuit : 4†ó°ñ°dONLNdæ,)cBG Quit - Selected 'Cancel'†ó°ñ°dONLNd.N•)êQuitBackgroundApps†ó°ñ°dONLNdA√)uLaunchQuit.Lib†ó"02"00    ™U™U™U™U"03@    ˇˇˇˇˇˇˇˇ"0t    ™U™U™U™U"0ua    ˇˇˇˇˇˇˇˇ"0◊    ™U™U™U™U 0ÿ0f    ˇˇˇˇˇˇˇˇ"0g    ™U™U™U™U"0hs    ˇˇˇˇˇˇˇˇ"0‹    ™U™U™U™U"0›M    ˇˇˇˇˇˇˇˇ"0-"0+"10"12"1t"1◊"1g"1‹"1+"1-°ñ°dONLNdQ)5C(Q6SPECS&L†ó°ñ°dONLNdY4@O*
  4574. Compatibility†ó°ñ°dONLNdg)[5ñ(Qy
  4575. SFSaveDoc : 1†ó°ñ°dONLNdu)æ5‹)cSaveAs†ó°ñ°dONLNd|)N5l)êSaveAs†ó°ñ°dONLNdÉ)√5)uStandardFile.Lib†ó"G2"G0    ™U™U™U™U"G3@    ˇˇˇˇˇˇˇˇ"Gt    ™U™U™U™U"Gua    ˇˇˇˇˇˇˇˇ"G◊    ™U™U™U™U GÿGf    ˇˇˇˇˇˇˇˇ"Gg    ™U™U™U™U"Ghs    ˇˇˇˇˇˇˇˇ"G‹    ™U™U™U™U"G›M    ˇˇˇˇˇˇˇˇ"G-"G+"H0"H2"Ht"H◊"Hg"H‹"H+"H-°ñ°dONLNdï@LC(h6SPECS&L†ó°ñ°dONLNdùKWO*
  4576. Compatibility†ó°ñ°dONLNd´@[Lñ(hy
  4577. SFSaveDoc : 2†ó°ñ°dONLNdπ@æL˚)cSave a new file†ó°ñ°dONLNd…@NLl)êSaveAs†ó°ñ°dONLNd–@√L)uStandardFile.Lib†ó"^2"^0    ™U™U™U™U"^3@    ˇˇˇˇˇˇˇˇ"^t    ™U™U™U™U"^ua    ˇˇˇˇˇˇˇˇ"^◊    ™U™U™U™U ^ÿ^f    ˇˇˇˇˇˇˇˇ"^g    ™U™U™U™U"^hs    ˇˇˇˇˇˇˇˇ"^‹    ™U™U™U™U"^›M    ˇˇˇˇˇˇˇˇ"^-"^+"_0"_2"_t"_◊"_g"_‹"_+"_-°ñ°dONLNd‚WcC(6SPECS&L†ó°ñ°dONLNdÍbnO*
  4578. Compatibility†ó°ñ°dONLNd¯W[cî(y SFSaveDoc: 3†ó°ñ°dONLNdWæc)c
  4579. CancelNewName†ó°ñ°dONLNdWNcÇ)ê ReplaceExist†ó°ñ°dONLNd W√c)uStandardFile.Lib†ó"u2"u0    ™U™U™U™U"u3@    ˇˇˇˇˇˇˇˇ"ut    ™U™U™U™U"uua    ˇˇˇˇˇˇˇˇ"u◊    ™U™U™U™U uÿuf    ˇˇˇˇˇˇˇˇ"ug    ™U™U™U™U"uhs    ˇˇˇˇˇˇˇˇ"u‹    ™U™U™U™U"u›M    ˇˇˇˇˇˇˇˇ"u-"u+"v0"v2"vt"v◊"vg"v‹"v+"v-°ñ°dONLNd2nzC(ñ6SPECS&L†ó°ñ°dONLNd:yÖO*
  4580. Compatibility†ó°ñ°dONLNdHn[zñ(ñy
  4581. SFSaveDoc : 4†ó°ñ°dONLNdVnæzˇ)cReplaceExisting†ó°ñ°dONLNdfnNzÇ)ê ReplaceExist†ó°ñ°dONLNdsn√z)uStandardFile.Lib†ó"å2"å0    ™U™U™U™U"å3@    ˇˇˇˇˇˇˇˇ"åt    ™U™U™U™U"åua    ˇˇˇˇˇˇˇˇ"å◊    ™U™U™U™U åÿåf    ˇˇˇˇˇˇˇˇ"åg    ™U™U™U™U"åhs    ˇˇˇˇˇˇˇˇ"å‹    ™U™U™U™U"å›M    ˇˇˇˇˇˇˇˇ"å-"å+"ç0"ç2"çt"ç◊"çg"ç‹"ç+"ç-°ñ°dONLNdÖÖëC(≠6SPECS&L†ó°ñ°dONLNdçêúO*
  4582. Compatibility†ó°ñ°dONLNdõÖ[ëñ(≠y
  4583. SFSaveDoc : 5†ó°ñ°dONLNd©ÖæëB)cSaveAs/Cancel -> Cancel Button†ó°ñ°dONLNd»ÖNëú)êCancelStandardFile†ó°ñ°dONLNd€Ö√ë)uStandardFile.Lib†ó"£2"£0    ™U™U™U™U"£3@    ˇˇˇˇˇˇˇˇ"£t    ™U™U™U™U"£ua    ˇˇˇˇˇˇˇˇ"£◊    ™U™U™U™U £ÿ£f    ˇˇˇˇˇˇˇˇ"£g    ™U™U™U™U"£hs    ˇˇˇˇˇˇˇˇ"£‹    ™U™U™U™U"£›M    ˇˇˇˇˇˇˇˇ"£-"£+"§0"§2"§t"§◊"§g"§‹"§+"§-°ñ°dONLNdÌú®C(ƒ6SPECS&L†ó°ñ°dONLNdıß≥O*
  4584. Compatibility†ó°ñ°dONLNdú[®ñ(ƒy
  4585. SFSaveDoc : 6†ó°ñ°dONLNdúæ®2)cSaveAs/Cancel -> Command†ó°ñ°dONLNd*ßæ≥˜*
  4586. Period/Escape†ó°ñ°dONLNd8úN®ú(ƒlCancelStandardFile†ó°ñ°dONLNdKú√®)uStandardFile.Lib†ó"∫2"∫0    ™U™U™U™U"∫3@    ˇˇˇˇˇˇˇˇ"∫t    ™U™U™U™U"∫ua    ˇˇˇˇˇˇˇˇ"∫◊    ™U™U™U™U ∫ÿ∫f    ˇˇˇˇˇˇˇˇ"∫g    ™U™U™U™U"∫hs    ˇˇˇˇˇˇˇˇ"∫‹    ™U™U™U™U"∫›M    ˇˇˇˇˇˇˇˇ"∫-"∫+"ª0"ª2"ªt"ª◊"ªg"ª‹"ª+"ª-°ñ°dONLNd]≥øC(€6SPECS&L†ó°ñ°dONLNdeæ O*
  4587. Compatibility†ó°ñ°dONLNds≥[øñ(€y
  4588. SFSaveDoc : 7†ó°ñ°dONLNdÅ≥æø*)cSave using Save menuitem†ó°ñ°dONLNdö≥Nøa)êSave†ó°ñ°dONLNdü≥√ø)uStandardFile.Lib†ó"—2"—0    ™U™U™U™U"—3@    ˇˇˇˇˇˇˇˇ"—t    ™U™U™U™U"—ua    ˇˇˇˇˇˇˇˇ"—◊    ™U™U™U™U —ÿ—f    ˇˇˇˇˇˇˇˇ"—g    ™U™U™U™U"—hs    ˇˇˇˇˇˇˇˇ"—‹    ™U™U™U™U"—›M    ˇˇˇˇˇˇˇˇ"—-"—+"“0"“2"“t"“◊"“g"“‹"“+"“-°ñ°dONLNd± ÷C(Ú6SPECS&L†ó°ñ°dONLNdπ’·O*
  4589. Compatibility†ó°ñ°dONLNd« [÷ì(Úy
  4590. RevertDoc : 1†ó°ñ°dONLNd’ æ÷)cModify a Document†ó°ñ°dONLNdÁ N÷ï)êModifyDocument†ó°ñ°dONLNdˆ √÷)uStandardFile.Lib†ó"Ë2"Ë0    ™U™U™U™U"Ë3@    ˇˇˇˇˇˇˇˇ"Ët    ™U™U™U™U"Ëua    ˇˇˇˇˇˇˇˇ"Ë◊    ™U™U™U™U ËÿËf    ˇˇˇˇˇˇˇˇ"Ëg    ™U™U™U™U"Ëhs    ˇˇˇˇˇˇˇˇ"Ë‹    ™U™U™U™U"Ë›M    ˇˇˇˇˇˇˇˇ"Ë-"Ë+"È0"È2"Èt"È◊"Èg"È‹"È+"È-°ñ°dONLNd·ÌC(    6SPECS&L†ó°ñ°dONLNdϯO*
  4591. Compatibility†ó°ñ°dONLNd·[Ìì(    y
  4592. RevertDoc : 2†ó°ñ°dONLNd,·æÌÿ)cRevert†ó°ñ°dONLNd3·NÌh)êRevert†ó°ñ°dONLNd:·√Ì)uStandardFile.Lib†ó"ˇ2"ˇ0    ™U™U™U™U"ˇ3@    ˇˇˇˇˇˇˇˇ"ˇt    ™U™U™U™U"ˇua    ˇˇˇˇˇˇˇˇ"ˇ◊    ™U™U™U™U ˇÿˇf    ˇˇˇˇˇˇˇˇ"ˇg    ™U™U™U™U"ˇhs    ˇˇˇˇˇˇˇˇ"ˇ‹    ™U™U™U™U"ˇ›M    ˇˇˇˇˇˇˇˇ"ˇ-"ˇ+"0"2"t"◊"g"‹"+"-°ñ°dONLNdL¯C( 6SPECS&L†ó°ñ°dONLNdTO*
  4593. Compatibility†ó°ñ°dONLNdb¯[ô( y
  4594. SFOpenDoc : 1†ó°ñ°dONLNdp¯æ„)cOpenFile†ó°ñ°dONLNdy¯Ns)êOpenFile†ó°ñ°dONLNdǯ√)uStandardFile.Lib†ó"2"0    ™U™U™U™U"3@    ˇˇˇˇˇˇˇˇ"t    ™U™U™U™U"ua    ˇˇˇˇˇˇˇˇ"◊    ™U™U™U™U ÿf    ˇˇˇˇˇˇˇˇ"g    ™U™U™U™U"hs    ˇˇˇˇˇˇˇˇ"‹    ™U™U™U™U"›M    ˇˇˇˇˇˇˇˇ"-"+"0"2"t"◊"g"‹"+"-°ñ°dONLNdîC(76SPECS&L†ó°ñ°dONLNdú&O*
  4595. Compatibility†ó°ñ°dONLNd™[ã(7y
  4596. NewDoc : 1†ó°ñ°dONLNdµæ )cSelect File - New...†ó°ñ°dONLNd NÑ)ê
  4597. DoSetUpApp†ó°ñ°dONLNd’√ˆ)u DoTasks.Lib†ó"-2"-0    ™U™U™U™U"-3@    ˇˇˇˇˇˇˇˇ"-t    ™U™U™U™U"-ua    ˇˇˇˇˇˇˇˇ"-◊    ™U™U™U™U -ÿ-f    ˇˇˇˇˇˇˇˇ"-g    ™U™U™U™U"-hs    ˇˇˇˇˇˇˇˇ"-‹    ™U™U™U™U"-›M    ˇˇˇˇˇˇˇˇ"--"-+".0".2".t".◊".g".‹".+".-°ñ°dONLNd‚&2C(N6SPECS&L†ó°ñ°dONLNdÍ1=O*
  4598. Compatibility†ó°ñ°dONLNd¯&[2î(Ny
  4599. ScrapBook : 1†ó°ñ°dONLNd&æ2)cScrapBook -> PICT†ó°ñ°dONLNd&N2x)ê    Scrapbook†ó°ñ°dONLNd"&√2·)uDA.Lib†ó"D2"D0    ™U™U™U™U"D3@    ˇˇˇˇˇˇˇˇ"Dt    ™U™U™U™U"Dua    ˇˇˇˇˇˇˇˇ"D◊    ™U™U™U™U DÿDf    ˇˇˇˇˇˇˇˇ"Dg    ™U™U™U™U"Dhs    ˇˇˇˇˇˇˇˇ"D‹    ™U™U™U™U"D›M    ˇˇˇˇˇˇˇˇ"D-"D+"E0"E2"Et"E◊"Eg"E‹"E+"E-°ñ°dONLNd*=IC(e6SPECS&L†ó°ñ°dONLNd2HTO*
  4600. Compatibility†ó°ñ°dONLNd@=[Iî(ey
  4601. ScrapBook : 2†ó°ñ°dONLNdN=æI
  4602. )cScrapBook -> Text†ó°ñ°dONLNd`=NIx)ê    Scrapbook†ó°ñ°dONLNdj=√I·)uDA.Lib†ó"[2"[0    ™U™U™U™U"[3@    ˇˇˇˇˇˇˇˇ"[t    ™U™U™U™U"[ua    ˇˇˇˇˇˇˇˇ"[◊    ™U™U™U™U [ÿ[f    ˇˇˇˇˇˇˇˇ"[g    ™U™U™U™U"[hs    ˇˇˇˇˇˇˇˇ"[‹    ™U™U™U™U"[›M    ˇˇˇˇˇˇˇˇ"[-"[+"\0"\2"\t"\◊"\g"\‹"\+"\-°ñ°dONLNdrT`C(|6SPECS&L†ó°ñ°dONLNdz_kO*
  4603. Compatibility†ó°ñ°dONLNdàT[`ë(|y ScrapBook: 3†ó°ñ°dONLNdïTæ`)cScrapBook -> General†ó°ñ°dONLNd™TN`x)ê    Scrapbook†ó°ñ°dONLNd¥T√`·)uDA.Lib†ó"r2"r0    ™U™U™U™U"r3@    ˇˇˇˇˇˇˇˇ"rt    ™U™U™U™U"rua    ˇˇˇˇˇˇˇˇ"r◊    ™U™U™U™U rÿrf    ˇˇˇˇˇˇˇˇ"rg    ™U™U™U™U"rhs    ˇˇˇˇˇˇˇˇ"r‹    ™U™U™U™U"r›M    ˇˇˇˇˇˇˇˇ"r-"r+"s0"s2"st"s◊"sg"s‹"s+"s-°ñ°dONLNdΩkwC(ì6SPECS&L†ó°ñ°dONLNd≈vÇO*
  4604. Compatibility†ó°ñ°dONLNd”k[wz(ìyFont : 1†ó°ñ°dONLNd‹kæw›)cSetFont†ó°ñ°dONLNd‰kNwm)êSetFont†ó°ñ°dONLNdÏk√wÂ)uFont.Lib†ó"â2"â0    ™U™U™U™U"â3@    ˇˇˇˇˇˇˇˇ"ât    ™U™U™U™U"âua    ˇˇˇˇˇˇˇˇ"â◊    ™U™U™U™U âÿâf    ˇˇˇˇˇˇˇˇ"âg    ™U™U™U™U"âhs    ˇˇˇˇˇˇˇˇ"â‹    ™U™U™U™U"â›M    ˇˇˇˇˇˇˇˇ"â-"â+"ä0"ä2"ät"ä◊"äg"ä‹"ä+"ä-°ñ†ó°ñ†ó°ñ†ó°ñ†ó°ñ†ó    ™U™U™U™U"†0C"†t"†ua"†◊ †ÿ†f"†g"†hs"†‹"†›M    ˇˇˇˇˇˇˇˇ"†-"†+"°+
  4605. "°-
  4606. ˇ;,◊#ˇ ˇˇˇˇ#◊°ñ 
  4607. _,Times
  4608. .ˇ°dONLNdˇˇ(⁄Z100°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ
  4609. °dONLNd,8:(T6Owner /†ó°ñ°dONLNd7C;* TCType†ó°ñ°dONLNd,[8É(Ty    TCSet : #†ó°ñ°dONLNd,æ8—)cDesc†ó°ñ°dONLNd,N8c)êTask†ó°ñ°dONLNd#,√8‰)uLibrary†ó"H0"H0"J2#"H3@"J3@"Ht"Jt"Hw_"Jw_"H◊"J◊ H⁄Hf J⁄Jf"Hg"Jg"Hjq"Jjq"H‹"J‹"HflK"JflK"H+#"J+#"K0"K2"Kt"K◊"Kg"K‹"K+"K-°ñ°dONLNd,DPC(l6SPECS&L†ó°ñ°dONLNd4O[O*
  4610. Compatibility†ó°ñ°dONLNdBD[Pz(lyFont : 2†ó°ñ°dONLNdKDæP€)cSetSize†ó°ñ°dONLNdSDNPk)êSetSize†ó°ñ°dONLNd[D√PÂ)uFont.Lib†ó"a2"a0"a3@"at"av`"a◊ aŸaf"ag"air"a‹"afiL"a-"a+"c0"c2"ct"c◊"cg"c‹"c+"c-°ñ°dONLNde[gC(É6SPECS&L†ó°ñ°dONLNdmfrO*
  4611. Compatibility†ó°ñ°dONLNd{[[gw(ÉyFont: 3†ó°ñ°dONLNdÉ[ægfl)cSetStyle†ó°ñ°dONLNdå[Ngo)êSetStyle†ó°ñ°dONLNdï[√gÂ)uFont.Lib†ó"y2"y0    ™U™U™U™U"y3@    ˇˇˇˇˇˇˇˇ"yt    ™U™U™U™U"yua    ˇˇˇˇˇˇˇˇ"y◊    ™U™U™U™U yÿyf    ˇˇˇˇˇˇˇˇ"yg    ™U™U™U™U"yhs    ˇˇˇˇˇˇˇˇ"y‹    ™U™U™U™U"y›M    ˇˇˇˇˇˇˇˇ"y-"y+"z0"z2"zt"z◊"zg"z‹"z+"z-°ñ°dONLNdür~C(ö6SPECS&L†ó°ñ°dONLNdß}âO*
  4612. Compatibility†ó°ñ°dONLNdµr[~z(öyFont : 4†ó°ñ°dONLNdæræ~)cSelectedItemsString†ó°ñ°dONLNd“rN~∏)êReportSelectedMenuItems†ó°ñ°dONLNdÍr√~Â)uFont.Lib†ó"ê2"ê0    ™U™U™U™U"ê3@    ˇˇˇˇˇˇˇˇ"êt    ™U™U™U™U"êua    ˇˇˇˇˇˇˇˇ"ê◊    ™U™U™U™U êÿêf    ˇˇˇˇˇˇˇˇ"êg    ™U™U™U™U"êhs    ˇˇˇˇˇˇˇˇ"ê‹    ™U™U™U™U"ê›M    ˇˇˇˇˇˇˇˇ"ê-"ê+"ë0"ë2"ët"ë◊"ëg"ë‹"ë+"ë-°ñ°dONLNdÙâïC(±6SPECS&L†ó°ñ°dONLNd¸î†O*
  4613. Compatibility†ó°ñ°dONLNd
  4614. â[ïë(±y
  4615. PageSetup : 1†ó°ñ°dONLNdâæï    )cSelect 'Page Setup'†ó°ñ°dONLNd,âNïx)ê    PageSetup†ó°ñ°dONLNd6â√ïÊ)u    Print.Lib†ó"ß2"ß0    ™U™U™U™U"ß3@    ˇˇˇˇˇˇˇˇ"ßt    ™U™U™U™U"ßua    ˇˇˇˇˇˇˇˇ"ß◊    ™U™U™U™U ßÿßf    ˇˇˇˇˇˇˇˇ"ßg    ™U™U™U™U"ßhs    ˇˇˇˇˇˇˇˇ"ß‹    ™U™U™U™U"ß›M    ˇˇˇˇˇˇˇˇ"ß-"ß+"®0"®2"®t"®◊"®g"®‹"®+"®-°ñ°dONLNdA†¨C(»6SPECS&L†ó°ñ°dONLNdI´∑O*
  4616. Compatibility†ó°ñ°dONLNdW†[¨ë(»y
  4617. PageSetup : 2†ó°ñ°dONLNde†æ¨9)cDismiss the Page Setup Dialog†ó°ñ°dONLNdɆN¨x)ê    PageSetup†ó°ñ°dONLNdç†√¨Ê)u    Print.Lib†ó"æ2"æ0    ™U™U™U™U"æ3@    ˇˇˇˇˇˇˇˇ"æt    ™U™U™U™U"æua    ˇˇˇˇˇˇˇˇ"æ◊    ™U™U™U™U æÿæf    ˇˇˇˇˇˇˇˇ"æg    ™U™U™U™U"æhs    ˇˇˇˇˇˇˇˇ"æ‹    ™U™U™U™U"æ›M    ˇˇˇˇˇˇˇˇ"æ-"æ+"ø0"ø2"øt"ø◊"øg"ø‹"ø+"ø-°ñ°dONLNdò∑√C(fl6SPECS&L†ó°ñ°dONLNd†¬ŒO*
  4618. Compatibility†ó°ñ°dONLNdÆ∑[√®(flyUIWindowDrag : 1†ó°ñ°dONLNdø∑æ√Ù)c
  4619. DragWindow†ó°ñ°dONLNd ∑N√Ñ)ê
  4620. DragWindow†ó°ñ°dONLNd’∑√√    )uUserInterface.Lib†ó"’2"’0    ™U™U™U™U"’3@    ˇˇˇˇˇˇˇˇ"’t    ™U™U™U™U"’ua    ˇˇˇˇˇˇˇˇ"’◊    ™U™U™U™U ’ÿ’f    ˇˇˇˇˇˇˇˇ"’g    ™U™U™U™U"’hs    ˇˇˇˇˇˇˇˇ"’‹    ™U™U™U™U"’›M    ˇˇˇˇˇˇˇˇ"’-"’+"÷0"÷2"÷t"÷◊"÷g"÷‹"÷+"÷-°ñ°dONLNdËŒ⁄C(ˆ6SPECS&L†ó°ñ°dONLNdŸÂO*
  4621. Compatibility†ó°ñ°dONLNd˛Œ[⁄®(ˆyUIWindowDrag : 2†ó°ñ°dONLNdŒæ⁄ )cDragAcrossScreens†ó°ñ°dONLNd!ŒN⁄ú)êDragAcrossScreens†ó°ñ°dONLNd3Œ√⁄    )uUserInterface.Lib†ó"Ï2"Ï0    ™U™U™U™U"Ï3@    ˇˇˇˇˇˇˇˇ"Ït    ™U™U™U™U"Ïua    ˇˇˇˇˇˇˇˇ"Ï◊    ™U™U™U™U ÏÿÏf    ˇˇˇˇˇˇˇˇ"Ïg    ™U™U™U™U"Ïhs    ˇˇˇˇˇˇˇˇ"Ï‹    ™U™U™U™U"Ï›M    ˇˇˇˇˇˇˇˇ"Ï-"Ï+"Ì0"Ì2"Ìt"Ì◊"Ìg"Ì‹"Ì+"Ì-°ñ°dONLNdFÂÒC(
  4622. 6SPECS&L†ó°ñ°dONLNdN¸O*
  4623. Compatibility†ó°ñ°dONLNd\Â[Ò¶(
  4624. yUIWindowDrag: 3†ó°ñ°dONLNdlÂæÒÌ)c
  4625. DragReturn†ó°ñ°dONLNdwÂNÒÑ)ê
  4626. DragWindow†ó°ñ°dONLNdÇÂ√Ò    )uUserInterface.Lib†ó"2"0    ™U™U™U™U"3@    ˇˇˇˇˇˇˇˇ"t    ™U™U™U™U"ua    ˇˇˇˇˇˇˇˇ"◊    ™U™U™U™U ÿf    ˇˇˇˇˇˇˇˇ"g    ™U™U™U™U"hs    ˇˇˇˇˇˇˇˇ"‹    ™U™U™U™U"›M    ˇˇˇˇˇˇˇˇ"-"+"0"2"t"◊"g"‹"+"-°ñ°dONLNdï¸C($6SPECS&L†ó°ñ°dONLNdùO*
  4627. Compatibility†ó°ñ°dONLNd´¸[´($yUIWindowClose : 1†ó°ñ°dONLNdΩ¸æÂ)cCloseBox†ó°ñ°dONLNdΔ¸Ná)ê CloseWindow†ó°ñ°dONLNd“¸√    )uUserInterface.Lib†ó"2"0    ™U™U™U™U"3@    ˇˇˇˇˇˇˇˇ"t    ™U™U™U™U"ua    ˇˇˇˇˇˇˇˇ"◊    ™U™U™U™U ÿf    ˇˇˇˇˇˇˇˇ"g    ™U™U™U™U"hs    ˇˇˇˇˇˇˇˇ"‹    ™U™U™U™U"›M    ˇˇˇˇˇˇˇˇ"-"+"0"2"t"◊"g"‹"+"-°ñ°dONLNdÂC(;6SPECS&L†ó°ñ°dONLNdÌ*O*
  4628. Compatibility†ó°ñ°dONLNd˚[´(;yUIWindowClose : 2†ó°ñ°dONLNd
  4629. æ)cCloseFromFileMenu†ó°ñ°dONLNdNá)ê CloseWindow†ó°ñ°dONLNd+√    )uUserInterface.Lib†ó"12"10    ™U™U™U™U"13@    ˇˇˇˇˇˇˇˇ"1t    ™U™U™U™U"1ua    ˇˇˇˇˇˇˇˇ"1◊    ™U™U™U™U 1ÿ1f    ˇˇˇˇˇˇˇˇ"1g    ™U™U™U™U"1hs    ˇˇˇˇˇˇˇˇ"1‹    ™U™U™U™U"1›M    ˇˇˇˇˇˇˇˇ"1-"1+"20"22"2t"2◊"2g"2‹"2+"2-°ñ°dONLNd>*6C(R6SPECS&L†ó°ñ°dONLNdF5AO*
  4630. Compatibility†ó°ñ°dONLNdT*[6©(RyUIWindowClose: 3†ó°ñ°dONLNde*æ6)cCloseFromKeyEq†ó°ñ°dONLNdt*N6á)ê CloseWindow†ó°ñ°dONLNdÄ*√6    )uUserInterface.Lib†ó"H2"H0    ™U™U™U™U"H3@    ˇˇˇˇˇˇˇˇ"Ht    ™U™U™U™U"Hua    ˇˇˇˇˇˇˇˇ"H◊    ™U™U™U™U HÿHf    ˇˇˇˇˇˇˇˇ"Hg    ™U™U™U™U"Hhs    ˇˇˇˇˇˇˇˇ"H‹    ™U™U™U™U"H›M    ˇˇˇˇˇˇˇˇ"H-"H+"I0"I2"It"I◊"Ig"I‹"I+"I-°ñ°dONLNdìAMC(i6SPECS&L†ó°ñ°dONLNdõLXO*
  4631. Compatibility†ó°ñ°dONLNd©A[M¨(iyUIWindowScroll : 1†ó°ñ°dONLNdºAæMˆ)cVerticalScroll†ó°ñ°dONLNdÀANMà)ê ScrollWindow†ó°ñ°dONLNdÿA√M    )uUserInterface.Lib†ó"_2"_0    ™U™U™U™U"_3@    ˇˇˇˇˇˇˇˇ"_t    ™U™U™U™U"_ua    ˇˇˇˇˇˇˇˇ"_◊    ™U™U™U™U _ÿ_f    ˇˇˇˇˇˇˇˇ"_g    ™U™U™U™U"_hs    ˇˇˇˇˇˇˇˇ"_‹    ™U™U™U™U"_›M    ˇˇˇˇˇˇˇˇ"_-"_+"`0"`2"`t"`◊"`g"`‹"`+"`-°ñ°dONLNdÎXdC(Ä6SPECS&L†ó°ñ°dONLNdÛcoO*
  4632. Compatibility†ó°ñ°dONLNdX[d¨(ÄyUIWindowScroll : 2†ó°ñ°dONLNdXæd)cHorizontalScroll†ó°ñ°dONLNd%XNdà)ê ScrollWindow†ó°ñ°dONLNd2X√d    )uUserInterface.Lib†ó"v2"v0    ™U™U™U™U"v3@    ˇˇˇˇˇˇˇˇ"vt    ™U™U™U™U"vua    ˇˇˇˇˇˇˇˇ"v◊    ™U™U™U™U vÿvf    ˇˇˇˇˇˇˇˇ"vg    ™U™U™U™U"vhs    ˇˇˇˇˇˇˇˇ"v‹    ™U™U™U™U"v›M    ˇˇˇˇˇˇˇˇ"v-"v+"w0"w2"wt"w◊"wg"w‹"w+"w-°ñ°dONLNdEo{C(ó6SPECS&L†ó°ñ°dONLNdMzÜO*
  4633. Compatibility†ó°ñ°dONLNd[o[{•(óyUIWindowSize : 1†ó°ñ°dONLNdloæ{Ò)c
  4634. SizeWindow†ó°ñ°dONLNdwoN{Å)ê
  4635. SizeWindow†ó°ñ°dONLNdÇo√{    )uUserInterface.Lib†ó"ç2"ç0    ™U™U™U™U"ç3@    ˇˇˇˇˇˇˇˇ"çt    ™U™U™U™U"çua    ˇˇˇˇˇˇˇˇ"ç◊    ™U™U™U™U çÿçf    ˇˇˇˇˇˇˇˇ"çg    ™U™U™U™U"çhs    ˇˇˇˇˇˇˇˇ"ç‹    ™U™U™U™U"ç›M    ˇˇˇˇˇˇˇˇ"ç-"ç+"é0"é2"ét"é◊"ég"é‹"é+"é-°ñ°dONLNdïÜíC(Æ6SPECS&L†ó°ñ°dONLNdùëùO*
  4636. Compatibility†ó°ñ°dONLNd´Ü[í•(ÆyUIWindowSize : 2†ó°ñ°dONLNdºÜæí
  4637. )cSizeAcrossScreens†ó°ñ°dONLNdŒÜNíö)êSizeAcrossScreens†ó°ñ°dONLNd‡Ü√í    )uUserInterface.Lib†ó"§2"§0    ™U™U™U™U"§3@    ˇˇˇˇˇˇˇˇ"§t    ™U™U™U™U"§ua    ˇˇˇˇˇˇˇˇ"§◊    ™U™U™U™U §ÿ§f    ˇˇˇˇˇˇˇˇ"§g    ™U™U™U™U"§hs    ˇˇˇˇˇˇˇˇ"§‹    ™U™U™U™U"§›M    ˇˇˇˇˇˇˇˇ"§-"§+"•0"•2"•t"•◊"•g"•‹"•+"•-°ñ°dONLNdÛù©C(≈6SPECS&L†ó°ñ°dONLNd˚®¥O*
  4638. Compatibility†ó°ñ°dONLNd    ù[©¥(≈yUIWindowMiscOp : 1†ó°ñ°dONLNdùæ©’)cZoom†ó°ñ°dONLNd!ùN©à)ê
  4639. ZoomWindow†ó°ñ°dONLNd,ù√©    )uUserInterface.Lib†ó"ª2"ª0    ™U™U™U™U"ª3@    ˇˇˇˇˇˇˇˇ"ªt    ™U™U™U™U"ªua    ˇˇˇˇˇˇˇˇ"ª◊    ™U™U™U™U ªÿªf    ˇˇˇˇˇˇˇˇ"ªg    ™U™U™U™U"ªhs    ˇˇˇˇˇˇˇˇ"ª‹    ™U™U™U™U"ª›M    ˇˇˇˇˇˇˇˇ"ª-"ª+"º0"º2"ºt"º◊"ºg"º‹"º+"º-°ñ°dONLNd?¥¿C(‹6SPECS&L†ó°ñ°dONLNdGøÀO*
  4640. Compatibility†ó°ñ°dONLNdU¥[¿ë(‹y AboutBox : 1†ó°ñ°dONLNdb¥æ¿˝)cSelect 'About...'†ó°ñ°dONLNdt¥N¿w)êAboutBox†ó°ñ°dONLNd}¥√¿Á)uMisc.Lib†ó"“2"“0    ™U™U™U™U"“3@    ˇˇˇˇˇˇˇˇ"“t    ™U™U™U™U"“ua    ˇˇˇˇˇˇˇˇ"“◊    ™U™U™U™U “ÿ“f    ˇˇˇˇˇˇˇˇ"“g    ™U™U™U™U"“hs    ˇˇˇˇˇˇˇˇ"“‹    ™U™U™U™U"“›M    ˇˇˇˇˇˇˇˇ"“-"“+"”0"”2"”t"”◊"”g"”‹"”+"”-°ñ°dONLNdáÀ◊C(Û6SPECS&L†ó°ñ°dONLNdè÷‚O*
  4641. Compatibility†ó°ñ°dONLNdùÀ[◊ë(Ûy AboutBox : 2†ó°ñ°dONLNd™Àæ◊ )cDismiss About Box†ó°ñ°dONLNdºÀN◊w)êAboutBox†ó°ñ°dONLNd≈À√◊Á)uMisc.Lib†ó"È2"È0    ™U™U™U™U"È3@    ˇˇˇˇˇˇˇˇ"Èt    ™U™U™U™U"Èua    ˇˇˇˇˇˇˇˇ"È◊    ™U™U™U™U ÈÿÈf    ˇˇˇˇˇˇˇˇ"Èg    ™U™U™U™U"Èhs    ˇˇˇˇˇˇˇˇ"È‹    ™U™U™U™U"È›M    ˇˇˇˇˇˇˇˇ"È-"È+"Í0"Í2"Ít"Í◊"Íg"Í‹"Í+"Í-°ñ°dONLNdœ‚ÓC(
  4642. 6SPECS&L†ó°ñ°dONLNd◊Ì˘O*
  4643. Compatibility†ó°ñ°dONLNd‚[Óè(
  4644. y AppSetup : 1†ó°ñ°dONLNdÚ‚æÓ%)cDismissed opening dialog†ó°ñ°dONLNd ‚NÓÑ)ê
  4645. DoSetUpApp†ó°ñ°dONLNd‚√Óˆ)u DoTasks.Lib†ó"2"0    ™U™U™U™U"3@    ˇˇˇˇˇˇˇˇ"t    ™U™U™U™U"ua    ˇˇˇˇˇˇˇˇ"◊    ™U™U™U™U ÿf    ˇˇˇˇˇˇˇˇ"g    ™U™U™U™U"hs    ˇˇˇˇˇˇˇˇ"‹    ™U™U™U™U"›M    ˇˇˇˇˇˇˇˇ"-"+"0"2"t"◊"g"‹"+"-°ñ°dONLNd#˘C(!6SPECS&L†ó°ñ°dONLNd+O*
  4646. Compatibility†ó°ñ°dONLNd9˘[è(!y AppSetup : 2†ó°ñ°dONLNdF˘æ@)cDismissed new document dialog†ó°ñ°dONLNdd˘NÑ)ê
  4647. DoSetUpApp†ó°ñ°dONLNdo˘√ˆ)u DoTasks.Lib†ó"2"0    ™U™U™U™U"3@    ˇˇˇˇˇˇˇˇ"t    ™U™U™U™U"ua    ˇˇˇˇˇˇˇˇ"◊    ™U™U™U™U ÿf    ˇˇˇˇˇˇˇˇ"g    ™U™U™U™U"hs    ˇˇˇˇˇˇˇˇ"‹    ™U™U™U™U"›M    ˇˇˇˇˇˇˇˇ"-"+"0"2"t"◊"g"‹"+"-°ñ°dONLNd|C(86SPECS&L†ó°ñ°dONLNdÑ'O*
  4648. Compatibility†ó°ñ°dONLNdí[}(8yDraw : 1†ó°ñ°dONLNdõæ
  4649. )cSetLineMenuItems†ó°ñ°dONLNd≠Nö)êSetLineMenuItems†ó°ñ°dONLNdæ√È)uDraw.Lib†ó".2".0    ™U™U™U™U".3@    ˇˇˇˇˇˇˇˇ".t    ™U™U™U™U".ua    ˇˇˇˇˇˇˇˇ".◊    ™U™U™U™U .ÿ.f    ˇˇˇˇˇˇˇˇ".g    ™U™U™U™U".hs    ˇˇˇˇˇˇˇˇ".‹    ™U™U™U™U".›M    ˇˇˇˇˇˇˇˇ".-".+"/0"/2"/t"/◊"/g"/‹"/+"/-°ñ°dONLNd»'3C(O6SPECS&L†ó°ñ°dONLNd–2>O*
  4650. Compatibility†ó°ñ°dONLNdfi'[3ï(OyPalettePicker :†ó°ñ°dONLNdÔ2[>{* 1 to 999†ó°ñ°dONLNd¯'æ3@(O‹!PalettePicker -> xyy (x indicates†ó°ñ°dONLNd2æ>D* "palette number - yy indicates tool†ó°ñ°dONLNd==æIfl* number)†ó°ñ°dONLNdE'N3Ç(Ol
  4651. PalettePicker†ó°ñ°dONLNdS'√3Ó)u Palette.Lib†ó"E2"E0    ™U™U™U™U"E3@    ˇˇˇˇˇˇˇˇ"Et    ™U™U™U™U"Eua    ˇˇˇˇˇˇˇˇ"E◊    ™U™U™U™U EÿEf    ˇˇˇˇˇˇˇˇ"Eg    ™U™U™U™U"Ehs    ˇˇˇˇˇˇˇˇ"E‹    ™U™U™U™U"E›M    ˇˇˇˇˇˇˇˇ"E-"E+"F0 "F2 "Ft "F◊ "Fg "F‹ "F+ "F- °ñ°dONLNd`IUC(q6SPECS&L†ó°ñ°dONLNdhT`O*
  4652. Compatibility†ó°ñ°dONLNdvI[Ué(qy
  4653. ToolPalette :†ó°ñ°dONLNdÖT[`{* 1 to 999†ó°ñ°dONLNdéIæU3(q‹SelectFromCoord -> the TC#†ó°ñ°dONLNd©Tæ`* indicates tool number†ó°ñ°dONLNdøINUâ(ql SelFromCoord†ó°ñ°dONLNdÃI√UÓ)u Palette.Lib†ó"g2"g0    ™U™U™U™U"g3@    ˇˇˇˇˇˇˇˇ"gt    ™U™U™U™U"gua    ˇˇˇˇˇˇˇˇ"g◊    ™U™U™U™U gÿgf    ˇˇˇˇˇˇˇˇ"gg    ™U™U™U™U"ghs    ˇˇˇˇˇˇˇˇ"g‹    ™U™U™U™U"g›M    ˇˇˇˇˇˇˇˇ"g-"g+"h0"h2"Ä0"~0"~2#"~3@"Ä3@"ht"~t"Ät"~w_"Äw_"h◊"~◊"Ä◊ ~⁄~f Ä⁄Äf"hg"~g"Äg"~jq"Äjq"h‹"~‹"Ä‹"~flK"ÄflK"h+"h-"Ä+"~-"~+#°ñ†óˇ
  4654. 8◊#ˇ ˇˇˇˇ#◊°ñ 
  4655. _,Times
  4656. .ˇ°dONLNdˇˇ(⁄ZApple Computer, Inc.°dONLNdˇˇ(⁄¯101†ó°ñ,     Helvetica
  4657. °dONLNd6<H(cZAppendix I - Utility Tools TXT
  4658.  gXg
  4659. †ó°ñ†ó°ñ
  4660. °dONLNd\<hŒ*!QMany tools have been developed that aid developing automated Virtual User scripts
  4661. [°dONLNdl\œh‘(ÑÌ. 
  4662. [°dONLNdn\‘hÈ)This†ó°ñ°dONLNdsh<tS(êZ=section details the tools that seem to be most useful for us.†ó°ñ†ó°ñ
  4663. °dONLNd±Ü<ïÜ*     MouseTrap†ó°ñ
  4664. °dONLNdªî<†** /An application which displays mouse coordinates
  4665. √@°dONLNdÍî*†/)Ó. 
  4666. √@°dONLNdÏî/†·)%It displays global mouse coordinates,†ó°ñ°dONLNd†<¨Ω(»ZPmouse coordinates relative to the top left corner of the front window, and mouse†ó°ñ°dONLNdc¨<∏¿* Tcoordinates relative to the last click. This tool is very handy when setting up data†ó°ñ°dONLNd∏∏<ƒ≥* structures for Draw tools†ó°ñ†ó°ñ
  4667. °dONLNd“ÿ<Áz*"    vuCollect†ó°ñ
  4668. °dONLNd‹Ê<Úœ* UCollects, formats and displays VU descriptor information. It's very useful to capture†ó°ñ°dONLNd2Ú<˛ë* @menu names, window names and to determine what VU can recognize.†ó°ñ†ó°ñ
  4669. °dONLNds<ñ*  MiniLauncher†ó°ñ
  4670. °dONLNdÄ<*E* 9An application that launches other applications, or files
  4671. ª¿°dONLNdπE*J(Fc. 
  4672. ª¿°dONLNdªJ*€)!It also allows for printing files†ó°ñ°dONLNd›*<6ä(RZfrom the Finder.†ó°ñ†ó°ñ
  4673. °dONLNdÓH<Wz* OnTarget†ó°ñ
  4674. °dONLNd˜V<b…* SVU external tool which provides services that extend the feature set available from†ó°ñ°dONLNdKb<nw* Virtual User
  4675. "@°dONLNdWbxn})<. 
  4676. "@°dONLNdYb}nœ)Services include:†ó°ñ,    Monaco
  4677.     °dONLNdmnÑyh+ &Service "BitDepth"() return 'integer';†ó°ñ°dONLNdïyÑÑÄ* *Service "MonitorCount"() return 'integer';†ó°ñ°dONLNd¡ÑÑèº* 4Service "ColorCheck"( 'integer' ) return  'integer';†ó°ñ°dONLNd˜èÑö∞* 2Service "SetColor"( 'integer' ) return  'integer';†ó°ñ°dONLNd+öÑ•n* 'Service "CacheTest"() return 'integer';†ó°ñ°dONLNdT•Ñ∞n* 'Service "FileShare"() return 'integer';†ó°ñ°dONLNd}∞Ѫ\* $Service "DiskSpace"() return 'list';†ó°ñ°dONLNd£ªÑΔn* 'Service "GDelete"('integer', 'string');†ó°ñ°dONLNdÃΔÑ—™* 1Service "vers"('string', 'string') return 'list';†ó°ñ†ó°ñ
  4678. °dONLNd‡<Ï3(Z2To access services use the OnTarget.vu VU library.
  4679. İdONLNd2›4Ì;)¯ 
  4680. İdONLNd3‡;ÏÃ)For additional information see†ó°ñ°dONLNdRÏ<¯∑(ZOnTarget documentation.†óˇ4◊#ˇ ˇˇˇˇ#◊°ñ 
  4681. _,Times
  4682. .ˇ°dONLNdˇˇ(⁄Z102°dONLNdˇˇ)c"The HitchHiker’s Guide to SPEC S&L†ó°ñ,     Helvetica
  4683. °dONLNd6˙H+(cNotes TXT
  4684.  gXg
  4685. †óˇ